说起VBA,很多接触过Excel的人会一脸茫然,但一说到宏就明白了。其实,宏与VBA从本质上是一回事,都是一组代码,只不过宏是我们运用Excel直接录制的操作步骤集合,以解决反复重复的操作带来的效率低下;而VBA是运用编写代码的形式完成宏不可能完成的自动处理任务,它可以应用到任何工作表或工作薄。
下面给VBA下个定义:VBA(Visual Basic For Application)是一种通用的自动化语言,是非常流行的应用程序开发语言Visual Basic的子集。VBA作为一种标准宏语言,具有跨越多种应用软件并且具有控制应用软件对象的能力,在Office中,VBA适用于所有应用程序,包括Word、Excel、PowerPoint、Access、Outlook以及Project。多种应用程序共用一种语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。所以,VBA不仅仅是针对Excel,对整个Office都能起到提升效率的编程工具。
以VBA最常见的应用领域Excel来说,我们运用它可以将重复的操作一键化,将复杂的计算简单化,可以根据实际需求自定义函数,快速访问、导入和导出外部数据,制作复杂、规范化的图表、数据模型,自动生成报告等。例如某大型写字楼对租户进行满意度调查,调查表用Excel形式且调查的项目较多,收回调查表多达几百份,再对工作薄中的数据进行,工作量巨大,需要两个人两天的时间,如果运用VBA编写的程序进行汇总,一个人几分钟即可,大大提高了工作效率。再比如,某大型金融机构的汽车信贷业务,需要对不同厂商、不同型号、不同时期、不同的城市销售汽车的贴息、贷款金额进行分类统计,并分别送达给各自的上游厂商。在收集不同品牌、不同城市的销售商数据时,由于品牌、型号的输入不规范、不统一,无法进行数据统计,而参照正确的品牌名称、型号对这些上万条数据进行整理就成了很大的问题,运用VBA快速整合,就成了简单、快速、低成本、高效率的解决方案。
以上是我们所讲的VBA优势所在,然而实现这一切,都是紧紧围绕着VBA程序代码的寄生平台Office应用软件,即针对Excel编写的代码,其程序的运行、对话框和窗体的打开、执行都需要先打开excel再进行处理,离开它VBA程序就成了无水的根。这就是VBA的局限性,因为它不是一个独立的执行语言平台。所以,希望运用VBA制作一个漂亮的启动界面(在不打开Excel的情况下),并拥有丰富的支持组件恐怕很难。
VBA的加密和权限设置是它的另一大缺陷,现在网上有很多Office和VBA原代码密码的破解工具,从去除密码到修改密码都有。
最可怕的是,Excel本身就是一个占用资源很大的程序,在应用代码对它进行操作时,如果表格本身数据量和修饰、公式很大时,速度自然而然很慢,影响数据处理的效率。
很多公司、个人希望将自己用VBA编写的程序、模型、甚至系统进行商业化,以取得一定的经济利益,而上述缺陷会给商业化的进程带来重重的困难。所以,现提供的两点建议:一是将VBA程序封装为DLL文件或可执行的EXE文件,但代码需要调整,且VBA窗体受程序模块本身的限制在封装过程中处理很麻烦。二是彻底放弃VBA,运用其他高级语言(像VSTO、C#等)对Excel直接操作,其搭建的交互式界面会和加密试、权限设置会非常专业。
因此,应正确认识VBA的功能以及它对Office的依赖性,才能将我们日常工作带来便利。