2.1 VBA的发展史与优缺点
VBA语言作为VB家族成员,起步很早。发展至今已拥有非常广大的用户群,在日常办公中起着举足轻重的作用。
2.1.1 宏与VBA
Excel早在1985年就首次在Machintosh上出现,1987年Excel开始引进到Windows环境中。当时Lotus 1-2-3是计算机历史上最成功的软件系统之一,但它仅支持一些极其简单的宏,而Excel软件从Excel 4开始,可以使用相对复杂的xlm宏,完成更复杂的工作,慢慢地将Lotus 1-2-3挤出电子表格行业,迅速占领了市场。当Excel 5中正式推出VBA(Visual Basic for Applications)作为通用的宏语言来为Office应用程序编写代码后,Excel已完全征服了制表用户。可见宏语言在表格软件中影响之深远。
宏的英文名为Macro,是自动执行某种操作的命令集合。它包括两个过程,即Excel 4或者称为xlm的宏语言和Excel 5中的VBA宏。Excel 4的宏由宏表函数构成,由录入在宏表中的函数来控制程序的执行。1993年发布的Excel 5中,微软开始推广VBA作为宏语言,并同时引进VBA编辑器,即VBE(Visual Basic Edirtor)。用户可以通过录制宏来产生代码,代码储存在VBE环境的代码模块中,利用Alt+F8可以反复调用录制的宏。
VBA是目前Office系列通用的一种程序语言,它支持录制、执行、单步执行、调试等操作,可以使用户从繁重的制表任务中解脱出来。VBA是一种面向对象的程序语言,由一种所见即所得的方式编写代码,这使它在学习和使用方面都比其他语言更简单。事实上,几乎所有VBA程序员都由录制宏开始学习VBA,这是一个VBA速成的捷径。甚至VBA高手们仍然对录制宏乐此不疲,因为它可以完成VBA程序的大部分代码,程序员仅需在录制的宏代码中稍加修改即可成为最后的合格程序;另一个最重要的因素是录制宏可以为程序员提供词典的作用,即忘记了某个对象单词,或者完全不明白某个属性的语法时,利用录制宏可以产生对应的代码,用户复制即可使用。
2.1.2 VBA历史与版本
VBA的前身是xlm宏语言,鉴于xlm宏功能有限,至今已经用VBA完全替代了xlm宏。但是为了体现兼容性,所有版本的VBA中皆可以调用以前的部分宏表函数。例如Excel 2007的application对象仍然保留了以下宏表相关的一个方法和两个属性,通过它们可以执行早期宏表所有函数:
● Application.ExecuteExcel4Macro
● Application.Excel4MacroSheets
● Application.Excel4IntlMacroSheets
在抛弃早期宏语言后,VBA从1993年开始逐步在很多软件中出现,除Office办公软件外,CAD、CorelDraw等软件也支持VBA。目前VBA的最高版本是6.05。但需要申明的是, VBA版本并非与主体程序的版本对应升级,即Excel的多个版本有可能使用的是同一版本的VBA。例如Office 2003和Office 2007都使用6.05版的VBA。
检测当前Office中VBA版本可以使用以下代码:
Sub 获取VBA版本号() MsgBox Application.VBE.Version End Sub
不同版本的VBA带有不同的函数,编程时需要根据VBA的版本调整代码,使之尽量通用。但在Excel中编写VBA程序时,Excel的版本号显得更为重要。因为不同的Excel版本有不同的对象和方法,而且差异较大。在本书的随书光盘中有Excel 2007与早期版在VBA方面的差异,作为插件开发者有必要进行全面了解。
2.1.3 VBA优、缺点
VBA作为Office办公软件的二次开发语言,它是一个很优秀的程序语言,从国内外Office论坛中与VBA相关的发贴量就可以知道VBA用户群有多大,这也反证了VBA在工作中应用的广泛性。
总体来说,VBA语言具有以下优点。
● 可以录制
早期的磁盘操作系统DOS不支持录制,虽然它是一门很简单的语言,但要让大多数用户学好DOS仍然是一件难事。它的每个命令,每个字母都需要手工录入,所有命令都需在大脑记忆。而VBA采用录制方式可以产生完整的代码,程序稍加优化即可取得最佳程序,摆脱死记代码的困扰。
● 所见即所得
Excel VBA有窗体及工作簿、工作表等对象,可以直接拖动产生对象,不需要编写创建对象的代码。而且可以调整为一边操作工作表数据或者图形对象,一边查看代码变化,即录制宏时同时查看工作簿窗口和代码窗口。
● 调用现成对象
VB或者C++开发程序时需要自己设计窗体、对象,而Excel中有现成的工作簿对象、工作表对象、窗口对象、图形对象等,开发者仅需对这些对象或者数据进行操作即可,不需要开发一个报表程序及各对数据存放介质。这也是VBA简单易学的原因之一。
● 应用广泛
目前Excel、Word、Access、PowerPoint、FrontPage、Visio、Project、Outlook、AutoCAD、CorelDraw等程序都支持VBA。而各程序间的代码可以相互移植,然后对代码中的引用对象稍加修改即可。
● 交流方便
这里说了交流是指VBA用户与用户之间的交流。国内外有很多大型的VBA相关论坛,可以通过论坛交流心得、学习他人的编程思路,以及在线提问。Office VBA方面的论坛远比C++与.net等语言的相关论坛要多得多。
相对于Excel内置功能,VBA也有它自己的缺点。
● 学习周期长
学习VBA的时间至少是两个月,而数据透视表、函数、图表等其他内置功能则相对要快一些。
● 专业词汇多
VBA中有几百个对象,每个对象有多个属性以及方法,虽然不需要死记硬背所有对象名称和属性,但仍然需要花很多精力来理解、消化。
● 普及范围小
目前VBA用户群在一天天扩大,但相对于Excel的内置功能如公式、图表等,仍然有待进一步提升普及率。在普及不够的情况下,程序员的插件需要做更完善的帮助系统,也需要更多的时间来测试,使未接触VBA的用户能更快地掌握其技巧。