我应该使用宏还是 VBA 代码?

决定使用宏、VBA,或者两者均使用,主要取决于你计划如何部署或分发数据库。 例如,如果数据库存储在你的计算机上,并且你是唯一的用户;如果你喜欢使用 VBA 代码,则可能会用 VBA 执行大部分编程任务。 但是,如果想要将数据库放置到文件服务器上以便与其他人共享,出于安全考虑,可能需要避免使用 VBA。

应根据以下两个因素来决定使用宏还是 VBA 代码:安全性和所需的功能。 安全性是一个考虑因素,因为 VBA 可以用来创建代码,这些代码可能会危害数据安全性或损害计算机上的文件。 使用其他人创建的数据库时,仅当你知道数据库具有可信来源后,才启用 VBA 代码。 当创建供其他人使用的数据库时,应尽量避免包含需要用户专门向数据库授予信任状态的编程工具。 本节后面部分中会介绍免除用户信任数据库的必要性的通用技术。

为帮助确保数据库的安全性,应尽量使用宏(当你能够使用宏时),并仅将 VBA 编程用于无法使用宏操作执行的操作。 此外,应尽量只使用无需向数据库授予信任状态以便运行的宏操作。 以这种方式限制宏操作的使用,可以让用户确信数据库没有任何可能损害其计算机数据或其他文件的编程。

宏的注意事项

从 Access 2010 版开始,Access 包含许多新的宏操作,用户构建的宏比使用早期版本的 Access 构建的宏更强大。 例如,现在可以通过宏操作来创建并使用全局临时变量,并且可以通过新的错误处理宏操作更轻松地处理错误。 在 Access 的早期版本中,只有通过 VBA 才能使用这些功能。 此外,可以将宏直接嵌入到对象或控件的事件属性中。 嵌入的宏将成为对象或控件的一部分,如果移动或复制,也与对象或控件绑定在一起。

宏可提供处理许多编程任务的简便方法,例如打开和关闭窗体以及运行报表。 可以快捷地将创建的数据库对象(窗体、报表等)绑定在一起,因为只需记住极少的语法。 每个操作的参数均显示在宏生成器中。

宏可提高安全性和易用性,除此之外,还必须使用宏来执行以下任务:

为键分配一个操作或一组操作。 这需要创建一个名为 AutoKeys 的宏组。

在数据库首次打开时,执行一个操作或一系列操作。 这需要创建一个名为 AutoExec 的宏。

注意:  AutoExec 宏可在任何其他宏或 VBA 代码之前运行,即使已在“Access 选项”对话框中指定了启动窗体,并已将宏或 VBA 代码附加到该窗体的 OnOpen或 OnLoad 事件中,也是如此。

有关如何构建宏的详细信息,请参阅了解宏部分。

VBA 的注意事项

如果要执行以下任何操作,应使用 VBA 编程而不是宏:

使用内置函数或创建自己的函数    Access 中包含许多内置函数,例如可以计算利息支付的 IPmt 函数。 可使用这些内置函数来执行计算,而无需创建复杂的表达式。 通过使用 VBA 代码,还可创建自己的函数,用于执行超出表达式功能的计算或替代复杂的表达式。 此外,可以使用表达式中创建的函数,将常见操作应用于多个对象。

创建或操作对象    在大多数情况下,你会发现在该对象的设计视图中创建和修改对象最简单。 但是,在某些情况下,你可能想要在代码中操作对象的定义。 使用 VBA,可以操作数据库中除数据库本身之外的所有对象。

执行系统级操作    可以在宏中执行 RunApp 操作,以从 Access (运行其他程序 (如 Microsoft Excel) ,但不能使用宏在 Access 外部执行其他操作。 通过使用 VBA,可以检查计算机上是否存在文件、使用自动化或动态数据交换 (DDE) 与其他基于 Microsoft Windows 的程序(如 Excel)进行通信,以及调用 Windows 动态链接库中的函数 (DLL) 。

一次处理一条记录    可以使用 VBA 逐步执行一组记录,一次一条记录,并针对每条记录执行一项操作。 相比之下,宏一次处理整个记录集。