Excel与VBA程序设计精讲.pdf
《Excel与VBA程序设计精讲.pdf》由会员分享,可在线阅读,更多相关《Excel与VBA程序设计精讲.pdf(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、3VBA 初步 19 Excel 与 VBA 程序设计 Copyright 2005 马维峰 3.VBA 初步初步 3.1.VBA 简介简介 VBA 是 Visual Basic for Application 的缩写,是一种应用程序自动化语言。所谓应用程序自动化,是指通过程序或者脚本让应用程序,例如 Microsoft Excel、Word 自动化完成一些工作,例如在 Excel 里自动设置单元格的格式、给单元格充填某些内容、自动计算等。在前面的章节里,我们通过使用宏来设置 Excel 单元格的格式、填充单元格的内容,而使宏完成这些工作的正是 VBA。VBA 的由来的由来 在 20 世纪 9
2、0 年代早期,使应用程序自动化还是充满挑战性的领域。对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言。例如,可以使用 Excel 的宏语言使 Excel 自动化,使用 Word Basic 使 Microsoft Word 自动化,等等。因此,Microsoftt决定开发一种应用程序共享的通用自动化语言 VBA,这就是 Visual Basic for Application(VBA)的由来。Visual Basic for Application 可以看做是非常流行的应用程序开发语言 Visual Basic 的一个子集,Visual Basic 其他子集还包括 VB Scri
3、pt 等。VBA 具有 VB 语言的大多数特征和易用性,它最大特点就是将 Excel 作为开发平台来开发应用程序,可以应用 Excel 的所有已有功能,例如数据处理、图表绘制、数据库连接、内置函数等等。本部分将对 VBA 及其开发环境 IDE(集成开发环境)、VBA 的基本语法、应用 VBA自动化 Excel 做一简单介绍。文中会涉及到一些诸如对象、事件等部分读者可能不熟悉或不清楚的概念,对于此类问题可直接忽略之,因为在后面会有详细介绍。本部分也不是一个 VBA 的参考文档,只是其语法、特征的快速浏览和介绍。学习完本部分的内容后,读者应该可以应用 Excel 和 VBA 进行一些简单的开发。3
4、VBA 初步 20 Excel 与 VBA 程序设计 Copyright 2005 马维峰 3.2.VBA 快速入门快速入门 3.2.1.VBA 开发环境开发环境 VBA 集成开发环境(IDE,Integrated Development Environment3的缩写)是进行 VBA程序设计和代码编写的地方,同一版本的 Office 共享同一 IDE。VBA 代码和 Excel 文件是保存在一起的,可以通过点击“工具 宏 Visual Basic 编辑器”打开 VBA 的 IDE环境(图 3-1),进行程序设计和代码编写。打开打开 VBA IDE 的方法:的方法:?通过“工具 宏 VISUA
5、L BASIC 编辑器”?通过快捷键“ALT+F11”?右键单击工具栏,选择“Visual Basic”,此工具栏有录制宏,打开 VBA IDE 等的快捷按钮:3 翻译为中文即“集成开发环境”。3VBA 初步 21 Excel 与 VBA 程序设计 Copyright 2005 马维峰 图 3-1 Visual Basic IDE 环境 图 3-1 为 Excel VBA 的 IDE 环境,对于所有使用同一版本 VBA 的应用程序,都共享相同的 IDE 环境。对于同一程序,例如 Excel,不管你打开几个 Excel 文件,但启动的 VBA的 IDE 环境只有一个。缺省情况下,VBA IDE
6、环境上方为菜单和工具条(图 3-1),左侧上方窗口为工程资源管理器窗口,资源管理器窗口之下为属性窗口,右侧最大的窗口为代码窗口。在资源管理器窗口可以看的所有打开和加载的 Excel 文件及其加载宏。每一个 Excel文件,在 VBA 下,称为一个工程,如果你同时打开了多个 Excel 文件,则在 VBA IDE 下可以看到有多个工程存在。每个 Excel 文件(工作薄)对应的 VBA 工程都有 4 类对象(图 3-2)。,包括:?Microsoft Excel 对象?窗体?模块?类模块 Microsoft Excel 对象对象代表了 Excel 文件及其包括的工作薄和工作表等几个对象,包括所有
7、的 Sheet 和一个 Workbook,分别表示文件(工作薄)中所有的工作表(包括图表),例如缺省情况下,Excel 文件包括 3 个 Sheet,在资源管理器窗口就包括 3 个 Sheet,名字分别是各 Sheet 的名字。ThisWorkbook 代表当前 Excel 文件。双击这些对象会打开代码窗口(图 3-1 右侧窗口),在此窗口中可输入相关的代码,响应工作薄或者文件的一些事件,例如文件的打开、关闭,工作薄的激活、内容修改、选择等(有关事件、Excel 对象模型见后)。窗体对象窗体对象代表了自定义对话框或界面,例如你编写了一个 VBA 求个人所得税的小程序,需要输入税率、收入等参数,
8、那么就可以使用窗体设计一个对话框,来获取用户输入。模块模块是自定义代码,包括我们录制的宏等 VBA 代码保存的地方。类模块类模块是以类或对象的方式编写的代码保存的地方。通过创建类模块,在 VBA 中也可以创建自己的类和对象,我们在“VBA 语言”一章会详细介绍 VBA 的面向对象编程的问题。关于各对象的具体含义和使用后面会详细介绍,这里只是做个最初的了解。在工程资源管理器窗口的右键菜单下,有添加用户窗体、模块、类模块的选项,也可以将已有的模3VBA 初步 22 Excel 与 VBA 程序设计 Copyright 2005 马维峰 块移除、导入和导出。在工程资源管理器之下,也可以通过将一个工程
9、中的模块用鼠标拖拽到另一个工程实现模块在工程之间的拷贝。图 3-2 VBA 工程资源管理器窗口 包括 2 个 VBA 工程 建议随时更改 Excel VBA 工程的名称,其缺省名称为“VBAProject”,可以通过选中工程,在属性窗口更改为有意义的名称,或者在菜单的“工具 VBAProject 属性”对话框中更改。在 VBA 工程资源管理器之下是属性窗口(图 3-3),主要用于对象属性的交互式设计和定义,例如选中图 3-2 中的 VBAProject,在属性窗口即可更改其名称。属性窗口除了更改工程、各对象、模块的基本属性外,主要用途是用户窗体(自定义对话框)的交互式设计。图 3-3 显示的就
10、是一个打开的窗体(UserForm)的属性窗口。3VBA 初步 23 Excel 与 VBA 程序设计 Copyright 2005 马维峰 图 3-3 VBA 属性窗口 在 IDE 窗口的右侧,可以打开代码窗口。在资源管理器窗口中的每一个对象会对应一个代码窗口(用户窗体包括一个设计窗口和一个代码窗口)。可以通过在对象上双击、在右键菜单或资源管理器工具栏上选择查看代码(或对象)打开代码窗口。对于 IDE 环境、菜单、工具栏的具体使用和说明,在后面的讲解中会逐步讲解说明。单击“视图 对象浏览器”或工具栏上的“对象浏览器”按钮即可打开对象浏览器窗口(图 3-4),在此窗口内可查看当前工程及其引用对
11、象的属性、方法和事件。对象浏览器对于熟悉和查看相应的 Excel 对象、引用对象(包括 COM 对象、其他 Excel 程序)所包含的类、属性、方法和事件非常有用,特别是在没有相应的帮助资料或者文档的情况下,对象浏览器是查看一个对象的内容的最有效的工具。3VBA 初步 24 Excel 与 VBA 程序设计 Copyright 2005 马维峰 图 3-4 VBA IDE 环境的对象浏览器 上部可以选择对象,也可以输入一些查询条件;左侧为对象列表;右侧是对象的成员,包括属性、方法和事件;下部为成员或者对象的说明 3.2.2.在在 VBA IDE 下进行开发下进行开发 熟悉了 VBA 的 IDE
12、 环境后,我们来开发 VBA 之旅的第一个程序。新建一个 Excel 文件,通过菜单或键盘快捷键打开 VBA 集成开发环境,在 VBAProject 上单击右键,选择“插入 模块”。这样,系统将打开一个代码窗口,在窗口中输入以下代码4。#001 Sub MyFirstVBAProgram()#002 Dim strName As String#003 Dim strHello As String#004 strName=InputBox(请输入你的名字:)#005 strHello=你好,&strName&!#006 MsgBox strHello#007 End Sub 将鼠标光标放置在这段
13、代码之内,单击菜单“运行 运行子过程/用户窗体”,或者 4 代码内的“#003”为行号,在实际代码中不能输入,在此只为文中叙述方便,之后不再重复。3VBA 初步 25 Excel 与 VBA 程序设计 Copyright 2005 马维峰 在工具栏单击运行按钮,则可运行这段代码。运行结果会显示一个对话框,输入一些内容后,会显示相应的问候语。同样,这段代码可以和宏一样,在 Excel 下选择并执行。与其他程序设计语言不同,VBA 程序是事件驱动的,没有 Main 函数之类的入口的概念。如果在 IDE 环境下,鼠标光标不在任何过程内,单击工具栏或运行菜单的运行,会显示一个对话框,要你选择要运行的过
14、程。本质上,VBA 代码应该只是一些完成具体工作的集合,而通过界面元素或者 Excel 的事件驱动执行,你可以通过自定义按钮、菜单,并指定一个宏(VBA 过程,自定义界面也可以通过编程手段完成此类工作),通过单击此按钮即可调用相应的 VBA 代码,或者将调用绑定在 Excel 的某个事件下。下面我们简单看一下上面这段代码的组成,代码第 1 行表示这是一个新的过程,名称为“MyFirstVBAProgram”,第 2、3 行定义了 2 个变量,其类型为字符串类型,第 4 行调用 InputBox 这个内置函数,并将返回值赋给 strName 这个变量,第 5 行将几个字符串组合成一个新的字符串,
15、第 6 行调用 MsgBox 这个函数,显示一个对话框,第 7 行表示过程结束。VBA 程序由不同的模块组成,在模块内部,可以定义不同的变量、过程或函数,由此组成一个完整的程序。代码窗口的设置代码窗口的设置 中文环境下 VBA IDE 代码窗口缺省的设置比较糟糕,字体为宋体,大小是 9 磅,使用不很方便,可以在“工具 选项”对话框下的“编辑器格式”页内设置代码窗口字体、颜色、背景。字体建议使用 Courier New,大小可以按照自己的分辨率设置标准以阅读清楚为宜。在此模块内,再新建一段代码:#001 Function MyAdd(varA,varB)As Variant#002 MyAdd=
16、varA+varB#003 End Function 此段代码非常简单,只有 3 行,第 1 行表示这是一个函数,具有 2 个参数 varA,和 varB,函数与过程的差别在于函数有返回值,第 2 行将参数 varA,和 varB 的和赋给函数,代表其返回值。函数无法直接运行,必须从工作表或者其他程序调用,例如,我们可以写以下一段简单的程序调用此函数:#001 Sub TestAdd()3VBA 初步 26 Excel 与 VBA 程序设计 Copyright 2005 马维峰#002 Dim a,b,c#003 a=12#004 b=34#005 c=MyAdd(a,b)#006 MsgBo
17、x c#007 End Sub 其中第 5 行为函数 MyAdd 的调用,函数将返回值赋给 c。需要说明的是,VBA 中,调用过程可以使用 Call 语句,也可省略,调用过程时,其参数的括号可以省略,但调用函数必须有括号。也可以直接在工作表内使用自定义的函数,例如在工作表中,我们可以和 Excel 内置函数一样使用自定义的函数(图 3-5),Excel 会负责参数传递,将返回值赋给相应的单元格,在引用参数改变时会自动重新计算,总之,与内置函数的使用没有什么不同。图 3-5 在工作表中使用自定义函数 以上通过 2 个 例子简单介绍了 VBA 编程的过程和概念,后面我们将正式进入 VBA编程之旅,
18、逐步讲解模块、函数与过程、数据类型、基本语法等概念。VBA 程序的保存程序的保存 当关闭 VBA IDE 的时候,不会提示保存用户所做的修改,当我们退出 Excel 保存其文件时,VBA 程序代码也随之保存,因为 VBA 代码是寄生于 Excel 或其他文档的,保存文档即保存了 VBA 代码。对于一般的 VBA 程序,这点没有什么问题,但如果是在进行加载宏的开发,那么退出 IDE 环境时,一定要点击其文件菜单或工具栏的保存,保存所做修改,否则会丢失所做的任何修改。3.2.3.模块、过程和函数模块、过程和函数 VBA 代码必须存放在某个位置,这个地方就是模块模块。模块模块是作为一个单元保存在一起
19、的 VBA 定义和过程的集合。VBA 中有两种基本类型的模块:标准模块和类模块。模块可以包括 2 类子程序:过程或者函数。3VBA 初步 27 Excel 与 VBA 程序设计 Copyright 2005 马维峰 一般来说,简单的 VBA 程序设计,大部分工作集中在标准模块中(后面简称为模块)。当 Excel 在录制宏时如果不存在模块,EXCEL 自动创建一个。EXCEL 和 VBA 不关心代码存放在哪一个模块中,只要代码存在于打开的工作簿中即可。可以在工程资源管理器上单击右键来增加删除模块(图 3-2),选中模块后可以在属性窗口修改其名称(图 3-3)。过程过程被定义为 VBA 代码的一个
20、单元,过程中包括一系列用于执行某个任务或是进行某种计算的 VBA 语句。一个工作簿的每个过程都有唯一的名字加以区分。过程只执行一个或多个操作,而不返回数值。当录制完宏查看代码时,所看到的就是过程。下面就是一个简单的修改选中文字的字体的过程。Sub ChangeFont()With Selection.Font .Name=Arial .FontStyle=Regular .Size=16 End With End sub 将这个过程输入到 VBA 中的某个过程,返回 Excel,在某个单元格输入文字,选中他,然后选择“工具 宏 宏”,在宏对话框中选择“ChangeFont”,然后执行他,我们会
21、看到选中的单元格文字格式被更改为“Arial”,16 点大小。函数过程通常情况下称为函数函数,是会返回一个值的过程。函数和过程的差别是其定义方式不同,函数使用 VBA 的关键字 Function 定义,而过程使用关键字 Sub 定义。函数返回的值称为返回值,这个数值通常是计算的结果或是测试的结果。我们可以用 VBA 创建自定义函数,并且在工作表上使用所创建的函数。以下程序是一个计算价格的 10%为运费的简单例子。Public Function Shipping(Price)Shipping=Price*0.1 End Function 这个函数使用一个参数(Price),过程和函数都可以使用参
22、数。不论 Price 的值是多少,它都将决定运费额。函数计算运费,计算结果在函数中通过赋给函数名“Shipping”来返回给调用者。Price 可以是数字和单元格引用。这个函数可以被其他过程或者函数调用,也可以使用在电子表格中。例如图 3-5 和图 3-6 所示。3VBA 初步 28 Excel 与 VBA 程序设计 Copyright 2005 马维峰 图 3-6 在工作表中使用函数 Shipping 3.2.4.创建过程和函数创建过程和函数 创建第一个过程需要两个基本步骤。首先,需要向工作簿中添加一个模块。接着需要向模块中添加不同的过程和函数。对于一个应用程序,可以使用一个模块,也可以使用
23、多个模块。如果你的程序比较复杂,使用多个模块可以更好的组织代码。下面我们从头开始创建一个只显示一个消息框的过程,来学习过程的创建,请按照以下步骤进行:(1)打开一个新工作簿,进入 Visual Basic 编辑器,也即 VBA IDE;(2)在VBA IDE 的左面的“工程资源管理器”窗口 VBA 工程上单击鼠标右键,选择“插入 模块”,这样就将一个模块添加到应用程序中了;(3)从菜单选择“插入 过程”,显示“添加过程”对话框;图 3-7 添加过程对话框(4)输入“HelloMsg”作为过程名字,在“类型”分组框中,确认选择了“子程序”,单击“确定”按钮继续;这样一个新的过程就添加到模块中了,
24、可以在模块中看到以下代码:3VBA 初步 29 Excel 与 VBA 程序设计 Copyright 2005 马维峰 Public Sub HelloMsg()End Sub(5)在过程中输入以下语句:MsgBox 这是我的第一个过程 在输入 MsgBox 后,会自动弹出一个有关这条命令的信息,称之为即时代码提示或自动列表技术。输入后的过程如下所示:Public Sub HelloMsg()MsgBox 这是我的第一个过程 End Sub 创建这个过程后,可以运行一下。运行一个过程有几种方法:将鼠标光标放置在这段代码之内,单击菜单“运行 运行子过程/用户窗体”,或者在工具栏单击运行按钮,则可
25、运行这段代码。运行后,此过程执行并显示一个消息框;单击消息框之中的“确定”按钮,关闭该消息框,程序运行结束。图 3-8 过程运行结果 要保存新过程,需要保存过程所在的工作簿。可以在 VBA IDE 环境下选择“文件 保存工作簿”保存,也可以在 Excel 环境下保存。VBA 对子程序和函数有如下的命名规则:?名字中可以包含字母数字和下划线;?名字中不能包含空格句号惊叹号,也不能包含字符&$#;?名字最多可以包含 255 个字符。在过程或者函数中,可以调用其他的过程或者函数,例如:#001 Function Add(a,b)#002 计算 a 和 b 的加法和#003 Add=a+b#004 E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Excel VBA 程序设计
限制150内