乐于分享
好东西不私藏

Excel VBA 编程基础 — 开发工具简介(二)

本文最后更新于2026-03-09,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

Excel VBA 编程基础 — 开发工具简介(二)

我们在上一篇文章中谈到了 Excel 的开发工具,特别对宏作了一些介绍。今天我们继续昨天未尽的话题。
再来看开发工具的功能区,如图1:
图1 开发工具功能区
我们说过,开发工具的功能区分为四部分,第一部分是代码(以后我们称这部分为代码区)。在代码区,宏就占了四项:
  • 录制宏:点击这个按钮,就开始宏的录制。
  • 宏:点击这个按钮,将弹出一个对话框,显示宏的列表。
  • 使用相对引用:这个比较复杂,见后文。
  • 宏安全性:点击这个按钮,将弹出一个对话框,显示宏安全性设置对话框,如图2。
图2 宏安全性设置
在这个对话框中,首先,选中“启用 VBA 宏”,尽管 Excel 不推荐,但要进行 VBA 编程,必须启用 VBA 宏。如果不进行 VBA 编程,也不录制宏,则选中第一项“禁用 VBA 宏”。
关于四项宏设置的进一步说明。
Excel 在禁用 VBA 宏时,提供了两项选择:
  • 不提供通知,禁用 VBA 宏
  • 通过通知禁用 VBA 宏
这两项的区别是,如果选择第二项“通过通知禁用 VBA 宏”,则在打开含有宏的 Excel 文件(.xlsm)时,会在功能区下方显示一条黄底黑字的通知,如图3:
图3 通过通知禁用 VBA 宏时的情况
如图所示,Excel 会在紧接功能区的下方显示一条通知:安全警告 宏已被禁用!此时,你可以点击“启用内容”来启用 VBA 宏。
如果选择的是第一项“不提供通知,禁用 VBA 宏”,则在打开含有宏的 Excel 文件时,不会显示这条通知。
无论通知还是不通知,只要禁用了 VBA 宏,则执行任何宏时,都会显示如下的警告信息:
图4 禁用宏的警告信息
如果选择宏设置的第三项“禁用无数字签署的 VBA 宏“,则只禁止那些没有数字签名的 VBA 宏,而允许那些经过数字签名的宏正常运行。这是一种在完全允许和完全禁止之间的一种”温和“设置,既不完全禁止(以免无法执行一些需要 VBA 代码才能完成的功能),又能够在一定程度上保证安全(经过数字签名的 VBA 宏是有一定安全保障的)。
如果你是一位 Excel 的 VBA 开发者,则需要选择第四项”启用 VBA 宏“,此时,Excel 附加了一条特别警告:(不推荐,可能运行危险代码)。这是一种免责声明,需要你自己进行判断:如果是在一个安全环境中,而且 VBA 代码都是你自己写的话,就不会有问题(当然,如果要自残,那老天也没办法)。
通常,在启用 VBA 宏的情况下,复选框“启用 VBA 宏时启用 Excel 4.0 宏”是选中的,这是为了与早期版本的 Excel 宏兼容,如果你没有历史遗留代码,则一般不需要此项兼容性设置,所以可以清除这个复选框。
写到这里,对 Excel 的宏再做一些介绍。
早期的电子表格软件是没有编程能力的,但有时候确实经常需要重复执行一些步骤,电子表格软件的开发者就用“宏(macro)”来代表这些需要自动执行的步骤,构造宏的方法就是录制,将一些需要自动执行的手工操作步骤录制下来,用一个名字来代表这些步骤。在需要执行这些步骤时,只需要执行这个宏的名字就可以。所以,本质上宏其实是一种映射:将名字映射为一系列步骤。
Excel 1.0 – 3.0 对宏的支持是比较原始的,Excel 4.0 引入了一种宏语言,称为 Excel Macro Language,简称为 XLM。这种宏又称为 Excel 4.0 宏。Excel 5.0 引入了 VBA,从此开始,所有录制的宏都自动转换为 VBA 代码。但 Excel 4.0 宏仍然可以在目前的 Excel 版本中运行。所以,Excel 会有一个复选框:启用 VBA 宏时启用 Excel 4.0 宏(见图2)。
我们将在以后介绍 Excel 4.0 宏(XLM)。
关于宏安全性设置,还有最后一项:信任对 VBA 工程对象模型的访问。
如果需要在 VBA 代码中访问 VBA 工程对象模型,则选中这个复选框。
那什么是 VBA 工程对象模型呢?
在启用了 VBA 宏的 Excel 文件中,点击“开发工具” -> “Visual Basic”,会弹出 VBA 的编辑器,如图5:
图5 VBE
图中的左侧窗口显示的 VBAProject,就是 VBA Info X.xlsm 这个工作簿的 VBA 工程(VBAProject,微软将其翻译为 VBA 工程)。VBAProject 包含了工作簿中所有与 VBA 编程有关的对象,这些对象组成一个树形结构,称为 VBAProject Object Model(VBA 工程对象模型)。
上图右侧的代码窗口显示了一段 VBA 代码,这段代码列出包含在 VBAProject 中的所有引用。如果选择了“信任对 VBA 工程对象模型的访问”,运行这段代码,将显示如下结果:
图6 显示 VBAProject 中的所有引用
这个结果与点击“工具” -> “引用……”所弹出的对话框中显示的结果是一致的,如图7:
图7 VBAProject 所选择的引用
图6与图7的对应关系如下:
  • VBA 对应于 Visual Basic For Applications
  • Excel 对应于 Microsoft Excel 16.0 Object Library
  • stdole 对应于 OLE Automation
  • Office 对应于 Microsoft Office 16.0 Object Library
当然,VBA 工程对象模型不仅仅包含 References,还包括其他很多对象,以后有机会再详细讨论。
如果清除了“信任对 VBA 工程对象模型的访问”,执行图5 所示的代码时,则显示如下错误信息:
图8 访问 VBProject 对象时失败(信息)
点击“调试”按钮,光标将停在 Set 语句,如图9:
图9 访问 VBProject 对象时失败(语句)
因为清除了对 VBA 工程对象模型访问的信任,所以 ThisWorkbook 不能访问 VBProject 对象,因此,读取 ThisWorkbook.VBProject 的值出错。
注1:图2中要设置的是“信任对 VBA 工程对象模型的访问”,而实际的 VBA 工程对象又称为 VBProject(如图9中右侧窗口中代码所示),不清楚为什么这个对象被称为 VBProject,而不是 VBAProject。实际上这个 VBProject 就是图2中所指的“VBA 工程对象模型”中最顶层的对象,或者称为根对象(root object)。我们前面说过,“VBA 工程对象模型”是指工作簿中与 VBA 编程有关的所有对象组成的一个树形结构,这个 VBProject 就是这棵树的根。可以从这个根(ThisWorkbook.VBProject)枚举出所有的对象。
注2:每一个启用了 VBA 宏的 Excel 工作簿都有一个 VBA 工程,默认名称是 VBAProject(如图9左侧窗口所示)。这个名字可以修改,方法是:点击 VBE 主菜单栏上的“工具” -> “ VBAProject(属性)……”,弹出“VBAProject – 工程属性”对话框,如图10:
图10 VBAProject – 工程属性对话框
在这个对话框中,你可以修改工程名称,还可以对工程作进一步的说明,等等。修改好后,点击“OK”关闭对话框。
连同上一篇《简介》,我们用两篇文章的篇幅,仅仅讨论了代码区中关于宏的四项内容中的三项,还剩“使用相对引用”没有讨论,我们将在讨论 Excel 的寻址方式时再说明“使用相对引用”是什么意思。
相关阅读
Excel VBA 编程基础 — 开发工具简介
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Excel VBA 编程基础 — 开发工具简介(二)

评论 抢沙发

9 + 6 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮