Excel VBA 编程基础 -- VBA 简介(七)
从 VBA 简介(六)开始,我们正式进入了代码窗口,开始写称为子程序(SUBroutine)的程序。“子程序”这个概念来自更古老的 Fortran 语言,在 BASIC 中称为“过程”,以区别于“函数”(Function)。我们以后会讲到过程和函数的区别,现在只需要明白我们在代码窗口中写的所有代码都必须包含在 Sub ... End Sub 结构(或 Function ... End Function 的结构)中。假设我们已经写好了一个称之为 MyFirstCode 的过程(如图1),那如何运行这个过程呢?一种方法是在 Excel 界面,点击“开发工具”,在开发工具功能区中,点击“宏”,如图2:鼠标放在“宏”按钮上,会显示一个小的帮助窗口,说明这个按钮的作用。点击这个按钮,或使用快捷键 Alt + F8,会显示宏列表,如图3:在宏列表中,选择要运行的宏,点击右侧的“执行”按钮,即可运行所选择的宏。也可以单步执行,可以观察每一步的运行情况,这点我们以后再详细讲。第二种方法是打开 VBE,如图1。按 F5 可以运行当前代码。如果鼠标不在 Sub ... End Sub 结构体内,则会弹出一个窗口,让你选择要运行的宏,如图4:图4 与图3 类似,都是供你选择要运行的宏。选择以后,点击“运行”即可。第三种方法,也是在 VBE 中,点击“工具” => “宏……”,也会弹出图4 的对话框,此处就不啰嗦了。Excel VBA 在这里有些混乱。点击 VBE 主菜单栏上的“运行”,下拉菜单的第一行是“运行子过程/用户窗体”,如图5:Excel 为了与以前的版本兼容,“宏”这个概念一直保留了下来,现在的“宏”就体现为 VBA 的 Sub。所以,你可以将宏与 Sub 理解为一个东西。点击“运行” => “运行子过程/用户窗体”的快捷键就是 F5。F5 的作用我们前面已经提过,此不赘述。用户窗体我们以后会详细介绍。我们可以在运行代码之前,先对代码进行编译。点击 VBE 主菜单栏上的“调试”,下拉菜单中的第一项是“编译 VBAProject”,如图6:我们曾经说过,Excel 的每个工作簿都有一个 VBA 工程项目,名为 VBAProject,这个名字可以修改。譬如改为 MyProject,那么图6 上的菜单也将改为“编译 MyProject”,如图7:我们在 Excel 中用 VBA 编程,简单来说包括这样几个步骤:- 代码编辑:简单说就是写代码,将我们完成任务的思路体现为一行行代码。
- 代码编译:VBA 代码需要经过编译,编译为内部编码,然后才能执行。这个过程一般都是隐含执行的:如果我们不选择 调试 => 编译,直接按 F5 快捷键执行的话,实际上 VBA 在执行之前会先编译,如果编译时发现错误,会停止编译,报告错误信息。
- 代码执行:编译步骤完成后,就进入执行阶段(如果我们按下了 F5)。如果代码没有错误,则执行结束,否则,会停止执行,报告运行时错误信息。
- 调试:如果执行时发生错误,需要查看代码哪里出了问题,发现问题并加以改正。调试是一个很重要的步骤,也是非常困难的步骤。VBE 也提供了很多手段和工具,帮助我们定位错误。
需要强调的是,与其前辈 BASIC、Visual Basic(VB)不同,VBA 是“寄生”(hosted)在 Excel 中的。Excel 包含了 VBA 的编辑器、编译器、运行时系统。VBA 不能单独存在,也不能编译为独立运行的 .exe 程序。Windows 平台的桌面版 Excel 是功能最齐全、最强大的 VBA 宿主环境,其架构如图8:从这个架构图可以看出,VBA 不仅可以在模块中写代码,也可以在类模块中写各种 Class,不仅可以访问 Excel 的各种对象,也可以通过引用访问其他的 COM 组件和 Excel 加载项,还可以访问 Windows 的 API,以获取操作系统提供的服务。随着我们对 VBA 了解的逐步深入,这些内容都会逐步涉及到。至此,我们对 VBA 的了解应该说已经入门,下面就是要“探其堂奥”了。