本文以Microsoft Office为基础,介绍VBA入门必备相关知识。
日常工作中你是否面临着重复操作多个Excel表格并做同样的工作?你是否希望有一个快速的方法处理几十个上百个Word文档中的某个相同的任务?你也有可能在Excel中进行无数次重复无趣的复制粘贴等操作搞得头晕目眩、腰酸背痛……。如果你有上述问题和困惑,那么请你仔细阅读此文。
Office的Visual Basic for Applications (VBA)(一种可用于扩展Office应用程序的简单且强大的编程语言)可以很轻松来自动执行以上这些任务并完成许多其他任务,让你事半功倍,解放双手。我们平时常说的宏实际就是VBA代码。
简单来讲本文可以告诉你VBA能干什么,VBA如何帮助我们提高生产力。
Office应用程序套件具有一组丰富的功能。可通过多种不同的方法对文档、电子邮件、数据库、表单、电子表格和演示文稿进行创作、格式设置和操作控制。Office VBA编程的杰出之处在于,你在界面上可以使用鼠标、键盘或对话框执行的几乎每一个操作也都可以使用VBA来完成。此外,若某个操作可以使用VBA执行一次,则可以同样轻松地执行该操作一百次乃至成千上万次。实际上,自动执行重复任务是Office VBA最常见的用途之一。
除了可通过编写VBA脚本来加速执行日常任务外,还可以使用VBA为Office应用程序添加新功能,或以特定于业务需要的方式来提示文档用户并与之交互。例如,可以编写一些VBA代码,使其在用户首次尝试保存文档时显示一个弹出消息,提醒用户将文档保存到特定存储位置。
考虑使用Office中的VBA编程功能有以下主要原因。
一、重复工作和自动化需求
当在应用大量重复性工作时,如设置格式或纠正问题等,使用VBA就非常高效。举例来说,你是否曾经在Word中更改过每一页顶部的段落样式?你是否曾经不得不对从Excel粘贴到Word文档或Outlook电子邮件中的多个表格重新设置格式?你是否曾经必须对多个Outlook联系人进行相同的更改?
如果你有必须进行十次,几十次的更改,则还可能使用手动操作的方式来进行,但如果是必须进行数百次甚至上千次的更改,显然手动方式不太现实,那么VBA当然是首选。你在Office中可手动完成的几乎任何格式设置或编辑更改都可用VBA完成。

二、实现与用户的交互
有时,你希望鼓励或强迫用户以不属于标准应用程序的特定方式与Office应用程序或文档进行交互。例如,你可能希望在用户打开、保存或打印文档时,提示他们执行一些特定的操作。
你也可能希望用户在操作Excel时可以通过对话框来交互,让用户输入信息,选择选项等并将这些信息录入在Excel中指定的位置。
在VBA可以实现丰富的窗体及控件来实现上述交互扩展。

三、Office应用程序之间的交互
你是否需要将所有联系人从Outlook复制到Word,然后以特定方式其进行格式设置?或者,你是否需要将数据从Excel移到一组PowerPoint幻灯片?有时,简单的复制和粘贴不能达到你的目的,或者速度太慢。使用VBA编程同时与两个或更多Office应用程序的详细信息交互,然后根据一个应用程序中的内容修改另一个应用程序中的内容。
四、以执行任务的方式替代人工操作
VBA编程是一种功能强大的解决方案,但并不总是最佳方法。有时,有必要使用其他方式来实现你的目标。
关键问题是,是否有更简单的方法。开始VBA编程之前,请考虑内置的工具和标准功能。举例来说,如果你有非常耗时的编辑或布局任务,请考虑使用样式或加速键来解决问题。你是否能执行一次任务,然后使用CTRL+Y(重做)来重复操作?你是否能使用正确的格式或模板创建新文档,然后将内容复制到该新文档中?
Office应用程序功能强大;你需要的解决方案可能已经存在。在开始编程之前,请花一些时间来详细了解Office。
如果迫在眉睫的工作的最后期限可能会造成非常紧张的情况,请尝试编写VBA来解决问题。当然作为初学者,学习编写VBA需要足够的时间和耐心。如果你的时间很紧,则可能需要使用传统方法,即使这些方法单调又重复,然后在工作之余重新尝试使用VBA来完成。
五、使用宏
当然,Office中对于VBA初学者也提供了宏工具,你可以尝试打开宏录制功能,然后操作Office,停止宏录制后Office将为你自动生成相应的VBA代码。如果你下次直接执行这个宏代码,同样的操作会自动实现。初学阶段可以多录制宏,学会读懂宏。宏也可以作为VBA编程中的重要参考手段,因为所有的VBA对象、方法及属性你不可能总是熟记于心,即使你是VBA的高手亦是如此。

六、自定义函数
Office的组件Excel中内置了大量的各类函数,基本可以满足你日常工作中的大部分需求。如果没有合适的函数你想自定义一个新函数来实现你的需求,或者你想将多个函数整合成一个新的函数,VBA也完全可以帮你轻松实现。比如以下自定义函数abc。

七、通过代码使应用程序执行操作
你可能认为编写VBA是件神秘又困难的事情,但是如果理解了Office中VBA面向对象的思想和设计后其实你完全可以不这么认为。Microsoft Office应用程序以面向对象的思想和设计方式创建,公开能够接收指令的事物(在现代编程术语中称为对象),这与将电话设计为包含按键以用于和电话交互的方式相同。按下按键时,电话会识别指令,并按照拨号顺序包含对应的号码。在VBA编程时,你通过向应用程序中的各种对象发送指令与应用程序进行交互。这些对象是可扩展的,但各有各的限制。这些对象只能执行为其设计的操作,并且只能按照你的指令执行操作。
例如,假设用户在Word中打开一个文档,进行一些更改,保存文档,然后将其关闭。在VBA编程领域,Word会公开Document对象。通过使用VBA代码,你可以指示Document对象执行诸如打开、保存或关闭等操作。当然假设在Excel中也需要一系列的自动操作,使用VBA来操作相应的Workbook和Worksheet对象同样一样简单。
新手读到这里可能觉得难懂,感到VBA深不可测,其实不然。本文在于抛砖引玉,让普通用户能初步揭开VBA的神秘面纱,如果感兴趣后续会以Excel VBA为起点结合实际案例来由浅入深讲解VBA的相关知识。咱们拒绝理论堆砌,注重简单易懂,学则会,会能用的理念,敬请期待和关注。
夜雨聆风