Office 97 开始,微软为所有的Office 组件引入了统一的应用程序自动化语言――Visual Basic For Application(VBA),并提供了VBA 的IDE 环境1。作为非常流行的应用程序开发
语言Visual Basic 的子集,VBA 具有VB 语言的大多数特征和易用性,它最大特点就是将 Excel 作为开发平台来开发应用程序,可以应用Excel 的所有现有功能,例如其数据处理、 图表绘制、数据库连接、内置函数等等。
VBA 作为Visual Basic 的应用程序的版本,与Visual Basic 的区别包括如下几个方面: 1. Visual Basic 用于创建Windows 应用程序,其代码最终被编译为可执行程序;而 VBA 是用于使已有的应用程序自动化,始终为解释执行;
2. Visual Basic 具有自己的开发环境,而VBA 必须“寄生于”已有的应用程序,例 如Office,或者其他应用程序;
3. Visual Basic 开发出的应用程序编译后可脱离VB 环境执行,但执行VBA 应用程 序要求用户访问相应的被“寄生的”应用程序,例如Excel 下开发的VBA 程序, 不仅要安装Excel,而且安装时必须安装VBA 环境才可以执行;
4. 使用 VBA 开发,可以使用相应“寄生”应用程序的已有功能,大大简化开发, 但同时,对于已有应用程序不擅长的任务,则较难实现。
尽管存在这些不同,Visual Basic 和VBA 在结构上仍然非常相似。如果你已经了解了 Visual Basic,会发现学习VBA 非常快;相应的掌握了VBA 会给Visual Basic 的学习打下 坚实的基础。当学会在Excel 中用VBA 创建解决方案后,你就已经具备了在其他Office 应用程序,例如Word、Access 等中用VBA 创建解决方案的基本知识。另外,VBA 不仅仅 是应用在微软自己的应用程序中,从VBA 5.0 起,微软开始为其他软件开发商提供VBA
1 Office97
使用的VBA 版本为5.0,在此之前并非所有Office 组件都提供VBA,而且VBA 并不提供IDE,
类似于现在的VBScipt。 1. 前言 2
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
的许可证2,允许在其他应用程序中集成VBA,例如CorelDraw、AutoCAD、ArcGIS 等软 件目前都集成了VBA。
VB, VBA, VBScipt
微软是制造概念和混乱的大师,例如VB 家族,就有很多成员,不算退役的QBasic、 Word Basic 之类的语言,目前被广泛应用的基于COM 技术的VB 成员就有VB、VBA、 VBScript。
从功能和概念上讲,VB > VBA > VBScript,后者是前者的子集。但实际上在VB 中, VBA 起着基础的作用,提供了大多数语言级别的支持,打开VB 和VBA 工程的引用, 你都可以看到VBA 的引用。虽然在VB 开发环境和VBA 环境下二者具体的DLL 模 块不同,但说明了微软内部是共享VB 语言的基础实现的。
1.2. Excel 作为开发平台
应用 Excel 作为开发工具,在目前主要有2 方面的用途。
第一是作为一种日常事务和工作处理的脚本语言,主要应用于类似办公自动化等领域。 例如办公室人员的重复性事务处理,科研人员的数据处理或模拟,公司或企业的简单的数 据处理汇总等等,在这种情况下,这也是过去很多年来Excel 的主要应用方面,在此方面, 可以应用Excel 实现以下功能: 1. 使重复性的任务自动化;
2. 自定义 Excel 中工具栏、菜单和窗体的界面;
3. 简化模板的使用;
4. 为 Excel 环境添加额外的功能; 5. 对数据执行复杂的操作和分析; 6. 自动绘制各类图表并进行自定义。
2 参见 http://www.msdn.microsoft.com/vba/companies/company.asp。
1. 前言 3
Excel 与VBA 程序设计 Copyright ? 2005 马维峰 Excel 在科学研究中的应用
由于 EXCEL 友好的用户体验、强大的功能及其普及性,再加上VBA 的帮助,使得 EXCEL 在科学研究中的应用越来越多,很多研究人员使用EXCEL 记录实验数据,通 过公式、自定义公式、各类EXCEL 加载宏处理数据,应用EXCEL 编写数学模型的实 现。
在地学研究中,很多著名的软件,如 Isoplot,都是使用Excel VBA 编写的;每年的 COMPUTER AND GEOSCIENCES 上有大量基于Excel 和VBA 的程序发表。
第二是作为企业应用的一个组件来使用,主要应用于企业应用程序的前端(表现层)
或领域层。在表现层,其实就是应用Excel 开发用户界面,通过COM 组件、Web Service、 ADO 或其他方式连接后端应用。另一种应用方式是通过其他程序,应用COM 自动化技术 来调用Excel,完成一些在Excel 中很容易完成,但在其他程序设计语言或环境下比较困难 的任务,例如很多公司使用Excel 作为报表工具。
随着 Office 2003 的发布,微软对智能客户端技术的推广,Office 和VBA 在企业应用, 智能客户端方面的应用会越来越多,针对VBA本身的不足,微软推出的VSTO(Visual Studio Tools for Office),使得开发人员可以应用.net 开发Office 应用。
本书并没有专门涉及 Excel 在企业开发中的应用,所以内容和例子也基本上是围绕第 一类应用而展开的。但实际上,不管是应用Excel 开发一般的数据处理程序还是应用Excel 开发企业应用的前端,其技术和思路都是类似的,如何正确使用Excel 的对象模型,如何 正确设计自己的程序是解决所有实际问题的基础。
1.3. 宏、加载宏和 VBA
本书并不打算涉及宏的录制和使用,但进行VBA 开发确实应该熟悉宏的录制和操作3。 Excel(包括其他Office 程序)允许用户录制一段宏,并将其记录为VBA 代码。对于开发 者,使用这一功能,一方面可以节省时间,将录制的宏代码作为开发的基础,另一方面, 对于不熟悉的操作,例如如何绘制图表,如何删除一行之类操作,可以录制一个宏并,通 过查看其VBA 代码进行学习。录制的宏可以在VBA 集成开发环境(IDE)中修改编辑, 可以为宏指定按钮、快捷键;而实际编写的代码也可以象宏一样在运行。如何录制宏可以
3 参见 Excel
帮助,基本上宏的录制非常简单,在需要录制的操作之前按下录制按钮,操作完成后停止录
制即可。录制完成后即可在VBA IDE 下查看其代码。 1. 前言 4
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
参考 Excel 帮助或有关书籍。
加载宏程序是一类程序,它们为 Microsoft Excel 添加可选的命令和功能。例如,Excel 的“分析工具库”加载宏程序提供了一套数据统计分析工具,在进行复杂统计或工程分析 时,可用它来节省操作步骤。
Excel 有三种类型的加载宏程序:Excel 加载宏、自定义的组件对象模型(COM)加 载宏和自动化加载宏。本书所说的加载宏特指Excel 加载宏(后缀为xla 的文件)。Excel
加载宏可以通过单击“工具 - 加载宏”菜单来调用,在加载宏对话框中,可以安装、卸 载加载宏,对于没有在对话框中的加载宏,可以通过浏览按钮定位相应的文件(图 1-1)。 图 1-1 Excel 加载宏对话框
包含 VBA 代码的Excel 文件,可以通过选择“文件 - 另存为”对话框保存为加载宏。 VBA 是一种脚本语言,它将Microsoft Office 中的每一个应用程序都看成一个对象。 Office 中,每个应用程序都由各自的Application 对象代表。例如在Word 中,Application 对象中包容了Word 的菜单栏、工具栏、Word 命令以及文档对象等等。文档对象中则包容 了所有的文字、表格、图像等文档组成部分的相应对象。在Excel 中,Application 对象中 包容了Excel 的菜单栏、工具栏、工作薄和工作表对象、图表对象等等。其中,工作表对 象和图表对象是Excel 中的主要对象。VBA 程序设计的主要任务就是通过编写代码操作这 些对象来完成一些任务。
1. 前言 5
Excel 与VBA 程序设计 Copyright ? 2005 马维峰 VBA 原理的隐喻
VBA 的基本原理可通过下图做示意性解释。
VBA 作为应用VBA 编写的代码和Office 对象之间的一个桥梁,为2 者之间的调用提 供支持,这种调用是通过COM 自动化实现的。例如我们的代码中一句代码,调用Office 中一个对象的一个属性,那么这个过程大概是类似这样的:VBA 环境解释执行这句代 码,如果发现对Office 对象的调用,就通过COM 的方式调用这个对象,获取其属性, 这样VBA 代码就可以和Office 对象进行交互。 2. VBA 简介 6
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
2. VBA 简介
要使用 VBA 进行数据处理,第一要熟悉VBA 的IDE 环境,知道如何进行代码书写, 如何编写代码,设计窗体,创建类模块(对象),第二要熟悉VBA 的基本语法和。二者都 是VBA 程序设计的基础,需要认真学习。
VBA 语法不是一章就可以全部介绍完全的,本章介绍的内容是最基本和应该熟练掌握 的内容,对于不熟悉或者不理解的内容可以在学习了后面的内容后再反过头来学习。有些 内容需要反复练习和熟悉。对于VBA 语法和用法的很多内容可以随时通过查看帮助来获 得相关信息。
本章和下一章(Excel 对象模型)的部分内容,特别是表格内的一些内容,没有必要 完全记住,可以作为参考手册来使用。
2.1. VBA 及其IDE 初步
本部分将对 VBA 及其开发环境IDE(集成开发环境)作一概略的介绍。VBA IDE 是 进行程序设计和代码编写的地方,同一版本的Office 共享同一IDE。文中会涉及到一些诸 如对象、事件等部分读者可能不熟悉或不清楚的概念,对于此类问题可直接忽略之,因为 在后面会有详细介绍。本部分也不是一个VBA 的参考文档,只是其语法、特征的快速浏 览和介绍。
2.1.1. VBA 集成开发环境(IDE)的组成
VBA 代码和Excel 文件是保存在一起的,可以通过点击“工具 ― 宏 ― Visual Basic 编辑器”打开VBA 的IDE 环境(图 2-1),进行程序设计和代码编写。
打开 IDE 环境的方法
", 通过“工具 ― 宏 ― VISUAL BASIC 编辑器” ", 通过快捷键“ALT + F11”
", 右键单击工具栏,选择“Visual Basic”,此工具栏有录制宏,打开VBA IDE 等的
快捷按钮: 2. VBA 简介 7
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
图 2-1 Visual Basic IDE 环境
图 2-1 为Excel VBA 的IDE 环境,对于所有使用同一版本VBA 的应用程序,都共享 相同的IDE 环境。对于同一程序,例如Excel,不管你打开几个Excel 文件,但启动的VBA 的IDE 环境只有一个。缺省情况下,VBA IDE 环境上方为菜单和工具条(图 2-1),左侧 上方窗口为工程资源管理器窗口,资源管理器窗口之下为属性窗口,右侧最大的窗口为代 码窗口。
在资源管理器窗口可以看的所有打开和加载的 Excel 文件及其加载宏。每一个Excel
文件,对应的VBA 工程都有4 类对象,包括:Microsoft Excel 对象、窗体、模块和类模块 (图 2-2)。Microsoft Excel 对象代表了Excel 文件及其包括的工作薄等几个对象,包括所 有的Sheet 和一个Workbook,分别表示文件(工作薄)中所有的工作表(包括图表),例 如缺省情况下,Excel 文件包括3 个Sheet,在资源管理器窗口就包括3 个Sheet,名字分别 是各Sheet 的名字。ThisWorkbook 代表当前Excel 文件。双击这些对象会打开代码窗口(图 2-1 右侧窗口),在此窗口中可输入相关的代码,响应工作薄或者文件的一些事件,例如文 件的打开、关闭,工作薄的激活、内容修改、选择等(有关事件、Excel 对象模型见后)。 窗体对象代表了自定义对话框或界面,模块为自定义代码的载体,类模块则是以类或对象 的方式编写代码的载体,关于各对象的具体含义和使用见后。在工程资源管理器窗口的右
2. VBA 简介 8
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
键菜单下,有添加用户窗体、模块、类模块的选项,也可以将已有的模块移除、导入和导 出。在工程资源管理器之下,也可以通过将一个工程中的模块用鼠标拖拽到另一个工程实 现模块在工程之间的拷贝。
图 2-2 VBA 工程资源管理器窗口
建议随时更改 Excel VBA 工程的名称,其缺省名称为“VBAProject”,可以通过选中 工程,在属性窗口更改为有意义的名称,或者在菜单的“工具- VBAProject 属性” 对话框中更改。
在 VBA 工程资源管理器之下是属性窗口(图 2-3),主要用于对象属性的交互式设计 和定义,例如选中图 2-2 中的VBAProject,在属性窗口即可更改其名称。属性窗口除了更 改工程、各对象、模块的基本属性外,主要用途是用户窗体(自定义对话框)的交互式设 计。图 2-3 显示的就是一个打开的窗体(UserForm)的属性窗口。
2. VBA 简介 9
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
图 2-3 VBA 属性窗口
在 IDE 窗口的右侧,可以打开代码窗口。在资源管理器窗口中的每一个对象会对应一 个代码窗口(用户窗体包括一个设计窗口和一个代码窗口)。可以通过在对象上双击、在右 键菜单或资源管理器工具栏上选择查看代码(或对象)打开代码窗口。
对于 IDE 环境、菜单、工具栏的具体使用和说明,在后面的讲解中会逐步讲解说明。 单击“视图 - 对象浏览器”或工具栏上的“对象浏览器”按钮即可打开对象浏览器
窗口(图 2-4),在此窗口内可查看当前工程及其引用对象的属性、方法和事件。对象浏览 器对于熟悉和查看相应的Excel 对象、引用对象(包括COM 对象、其他Excel 程序)所包 含的类、属性、方法和事件非常有用,特别是在没有相应的帮助资料或者文档的情况下, 对象浏览器是查看一个对象的内容的最有效的工具。
2. VBA 简介 10
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
图 2-4 VBA IDE 环境的对象浏览器
2.1.2. 在 VBA IDE 下进行开发
熟悉了 VBA 的IDE 环境后,我们来开发VBA 之旅的第一个程序。新建一个Excel 文 件,通过菜单或键盘快捷键打开VBA 集成开发环境,在VBAProject 上单击右键,选择“插 入 - 模块”。这样,系统将打开一个代码窗口,在窗口中输入以下代码4。 #001 Sub MyFirstVBAProgram() #002 Dim strName As String #003 Dim strHello As String
#004 strName = InputBox(\请输入你的名字:\#005 strHello = \你好,\#006 MsgBox strHello #007 End Sub
将鼠标光标放置在这段代码之内,单击菜单“运行 - 运行子过程/用户窗体”,或者 在工具栏单击运行按钮,则可运行这段代码。运行结果会显示一个对话框,输入一些内容
4 代码内的“#003”为行号,在实际代码中不能输入,在此只为文中叙述方便,之后不再重复。
2. VBA 简介 11
Excel 与VBA 程序设计 Copyright ? 2005 马维峰
后,会显示相应的问候语。同样,这段代码可以和宏一样,在 Excel 下选择并执行。
与其他程序设计语言不同,VBA 程序是事件驱动的,没有Main 函数之类的入口的概 念。如果在IDE 环境下,鼠标光标不在任何过程内,单击工具栏或运行菜单的运行, 会显示一个对话框,要你选择要运行的过程。
本质上,VBA 代码应该只是一些完成具体工作的集合,而通过界面元素或者Excel 的 事件驱动执行,你可以通过自定义按钮、菜单,并指定一个宏(VBA 过程,自定义界 面也可以通过编程手段完成此类工作),通过单击此按钮即可调用相应的VBA 代码, 或者将调用绑定在Excel 的某个事件下。
下面我们简单看一下这段代码的组成,代码第1 行表示这是一个新的过程,名称为
“MyFirstVBAProgram”,第2、3 行定义了2 个变量,其类型为字符串类型,第4 行调用 InputBox 这个内置函数,并将返回值赋给strName 这个变量,第5 行将几个字符串组合成 一个新的字符串,第6 行调用MsgBox 这个函数,显示一个对话框,第7 行表示过程结束。 VBA 程序由不同的模块组成,在模块内部,可以定义不同的变量、过程或函数,由此组成
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Excel与VBA程序设计(mini)(2)在线全文阅读。
相关推荐: