VBA的全称是Microsoft Visual Basic for Applications。在多个Office客户端应用程序中都一直保留对这个编程方式的支持。Visual Basic,这个由微软公司于1991年推出的开发语言,直到现在都仍然保持着强大的活力(在编程语言排行榜单中名列前茅),除了它本身的易用性之外,我觉得它在Office产品家族中的嵌入式编程支持是非常关键的一个原因。由于VBA的巨大成功,甚至一些非微软产品(例如AutoCAD)中也支持VBA。
虽然理论上说VBA可以做很多事情,但它主要擅长的是对应用程序内部操作的自动化。例如,我需要根据Excel一个表格的数据,每一行生成一个表单,然后发送到打印机去打印出来。
你现在能找到的任何一个Office版本,你打开某个应用(例如Excel)后,按下ALT+F11键即可进入VBA的编辑器界面。
绝大部分应用程序的VBA编辑器都支持三类模块:首先是该应用本身的对象模块(通常跟该应用程序的行为——主要体现为事件——密切相关),然后是Forms(这是Visual Basic这个名称中Visual的意思,即可视化的编程),然后就是类模块。由于之前提到VBA主要是对Office的自动化,所以相当一部分VBA程序代码都集中在应用本身的对象模块中,而某些标准化较高的通用组件(例如我的偶像John的不朽杰作——Power Pack),则有大量代码在类模块或者Forms中。
我是工作之后才真正学习计算机编程的,所以实际上可以说,是VB/VBA带我进入了面向对象编程的大门。多少个抽着劣质香烟熬着的夜晚,我都是在跟下面这样的错误提示消息作战,直到多年以后的技术有了一定的提高,我也终于真正意义上找到了对象。
学习VBA的首要工作就是要比较清楚地了解应用程序的对象模型,严格来说,这个并不难,微软提供了相当丰富详细的帮助文档(例如Excel的不完全对象模型如下),但是熟才能生巧,只有大量的实践才可能真正地得心应手。
但是,一个好消息是,在Office应用程序中,都提供了录制宏的功能,也就是说,你可以先按照想法进行操作,然后录制工具会把相应的代码记录下来,通常这些代码直接就可以运行,但是理想情况下应该是略加修改才真正有实用价值。毫不避讳地说,这是我早年学习VBA的一个重要法宝。编程工具能做到这个层面,不光是业界良心,而且从技术上面说也是相当先进的。
宏——macro——是VBA中的一个重要概念,通常可以简单理解为一组代码。
VBA代码的部署一般分为两种,它可以作为Office文档的一部分存在(例如只是某个文件的特定功能的话),也可以单独存在(假定是一个通用的功能,尤其是希望在应用程序启动的时候就自动加载的话)。前者不消多说,现在一般就是通过带有m后缀的文件名保存即可(例如xlsm, docm等),后者有一个更加专用的格式(例如xlam)和叫法(加载宏)。
2.VSTOVSTO的全称是Visual Studio Tools for Office,最早的版本出现在Visual Studio .NET 2003里面,但真正引起开发人员兴趣是在Visual Studio 2005,对应的Office版本是2007。
为什么会推出VSTO这套工具呢?我个人觉得一方面是因为Visual Studio 及.NET自身发展的需要,另一方面是Office及开发人员的需要。VBA很好,但它的局限性也比较明显——它主要适合做应用程序内部的自动化,很难便捷地跟外界系统或网络资源打交道,同时对于新版本Office的一些特殊功能(例如Ribbon或者Task Pane等)也缺乏支持。
最新版本的Visual Studio 2017中,采用了模块化的安装体验,如果选择了Office 开发这个模块,那么就可以在项目模板中看到一大堆VSTO的模板(针对不同的应用程序,还会有不同的模板),如下图所示
我选择了Excel Add-in这个模板,点击“Ok”后,会自动生成如下的代码
这里就是我们熟悉的.NET编程的体验,可以用到几乎所有.NET Framework的功能,目前VSTO支持的开发语言除了VB.NET,还有C#。
需要注意的是,VSTO相比VBA来说,在部署方面会更加复杂。首先,它要求目标运行的环境,不光是Office版本要一致(通常高版本可以向下兼容),而且必须有对应的.NET运行环境。
这种版本和运行环境的依赖性在某种程度上对VSTO的应用起到了一定的制约,尤其在云优先以及移动为先的时代,它与VBA在这方面的局限性进一步放大,考虑到需要进一步简化部署,更重要的是希望在不同的平台以及移动设备上面都能得到一致性的体验,从Office 2013开始,及至现在的Office 365家族,以Web技术为基础、以App为模型,微软为广大的开发人员提供了全新的开发支持,打开了一个新的视野。此为后话,且按住不表。
必须提出的是,微软对于VBA和VSTO的支持将继续保留,它们有自己的优势,尤其是对于Office 应用程序自有功能的自动化、快速开发、在本地使用的场景。如果大家有兴趣对VBA或者VSTO进行学习和交流,我推荐大家关注ExcelHome,相信我,这是一个神奇的网站——“Excel教程下载和软件下载中心,Microsoft技术社区联盟成员,全球领先的Excel门户,Office技术培训的最佳社区”。
本文将同时在 微软中国Office 365官方微信号连载,欢迎关注“ mschinaoffice365",每周都会收到各种新功能介绍和实用技巧。
本文未完待续,请感兴趣的朋友们继续关注如下两个话题
posted on