在 Access 2010 中,微软引入了一种全新的、功能强大的宏编程环境,称为 “宏生成器”,这与早期版本(如 Access 2003)的宏系统有本质区别,新宏基于 “宏操作” 和 “数据宏” 两大核心,使得开发者无需编写 VBA 代码也能实现非常复杂的自动化逻辑。

宏的基本概念
宏 是一系列操作的集合,这些操作由 Access 自动按顺序执行,你可以把宏理解成一个“剧本”,Access 按照剧本上的指令一步步完成工作。
Access 2010 宏的优势:
- 无需编程: 对于简单的任务,通过图形化界面就能创建,比 VBA 更直观。
- 安全: 默认情况下,宏是“受信任的”,不会像旧版宏那样容易受到病毒攻击。
- 功能强大: 新宏不仅能操作界面,还能直接操作数据表中的记录(数据宏)。
- 与事件紧密结合: 宏可以轻松地附加到窗体、报表、控件的各种事件上(如“单击”、“打开”、“更新后”等)。
宏的两大类型
Access 2010 的宏分为两种,分别用于处理不同层面的问题。
常规宏
常规宏用于 用户界面层 的自动化,

- 打开或关闭窗体/报表。
- 筛选或查找数据。
- 显示消息框。
- 运行另一个宏或查询。
- 导入/导出数据。
如何创建常规宏?
- 在“创建”选项卡中,点击“宏”按钮。
- 这将打开“宏生成器”窗口,它看起来像一个表格。
- 在“操作”列的下拉列表中选择你想要执行的动作。
- 在下方的“操作参数”区域为这个动作设置具体参数。
- 点击“添加新操作”来添加下一个动作,宏会按从上到下的顺序执行。
数据宏
数据宏是 Access 2010 的一个革命性功能,它直接 在数据表层面 工作,无论数据是通过窗体、查询还是直接在表中修改,只要触发了特定条件,数据宏就会执行。
数据宏分为两种:
- 更改前: 在记录被更改(插入、更新、删除)之前触发,常用于数据验证,防止无效数据被保存。
- 更改后: 在记录被更改之后触发,常用于审计日志、级联更新/删除、发送通知等。
如何创建数据宏?

- 在导航窗格中,右键单击你要添加数据宏的表,选择“视图” -> “设计视图”。
- 在“表格设计”选项卡中,点击“数据表”选项卡下的“数据宏”按钮。
- 选择“创建数据宏”,然后选择是“更改前”还是“更改后”。
- 接下来的界面和常规宏的宏生成器一样,你可以添加操作。
常用宏操作详解
下面是一些最常用和最核心的宏操作,并附上示例说明。
| 类别 | 操作名称 | 功能描述 | 常用参数 | 示例场景 |
|---|---|---|---|---|
| 窗口管理 | OpenForm |
打开指定的窗体。 | 窗体名称: 要打开的窗体。 视图: 窗体、数据表、设计等。 筛选条件: 设置窗体打开时的默认筛选。 |
点击“客户列表”窗体中的“订单”按钮,打开“订单”窗体,并自动筛选出该客户的订单。 |
Close |
关闭指定的对象。 | 对象类型: 窗体、报表等。 对象名称: 要关闭的对象名称。 保存: 提示/保存/不保存。 |
用户完成数据输入后,点击“保存并关闭”按钮,执行此宏来关闭当前窗体。 | |
| 导航 | GoToControl |
将焦点移动到窗体或报表上的指定控件。 | 控件名称: 目标控件的名称。 | 打开窗体后,自动将光标定位到“员工姓名”输入框。 |
GoToRecord |
移动到指定记录。 | 对象类型: 窗体、数据表。 对象名称。 记录: 首记录、尾记录、新记录等。 |
点击“下一个”按钮,移动到窗体中的下一条记录。 | |
| 数据操作 | RunCommand |
执行一个内置的 Access 命令。 | 命令: 如 acCmdSaveRecord (保存记录), acCmdUndo (撤销), acCmdRefresh (刷新)。 |
创建一个自定义工具栏按钮,点击后执行“保存记录”命令。 |
RunSQL |
执行一个 SQL 语句。 | SQL 语句: 要执行的 SQL 命令字符串。 | 在窗体中点击“归档”按钮,执行一个 UPDATE 语句,将记录状态改为“已归档”。 |
|
| 程序流程 | If |
创建条件逻辑,如果条件为真,则执行一组操作。 | 表达式: 条件表达式,如 [订单金额] > 1000。 |
检查订单金额,如果超过1000元,则弹出一个提示框。 |
MessageBox |
显示一个消息框。 | 消息: 要显示的文本。 发嘟嘟声: 是否发出声音。 类型: 信息、警告、严重等。 |
操作成功后显示“数据已保存!”;操作失败前显示“确认删除此记录吗?”。 | |
RunMacro |
运行另一个宏。 | 宏名称: 要运行的宏名称。 重复次数/重复表达式: 控制循环。 |
将常用的操作(如“打开设置窗体”)封装成一个宏,然后在多个地方调用它。 | |
| 数据导入/导出 | TransferSpreadsheet |
在 Access 表和 Excel 文件之间导入或导出数据。 | 数据库类型: acSpreadsheet。电子表格类型: acSpreadsheetTypeExcel12Xml (xlsx)。表名称: Access 表名。 文件名: Excel 文件路径。 范围: Excel 中的工作表名或单元格范围。 |
点击“导出报表”按钮,将“销售报表”数据导出到一个 Excel 文件中。 |
TransferText |
在 Access 表和文本文件之间导入或导出数据。 | 类似于 TransferSpreadsheet,但用于文本文件(如 .csv, .txt)。 |
导入一个逗号分隔的文本文件到临时表中。 |
宏的实战示例
示例1:创建一个登录验证宏
目标: 在打开主窗体前,先检查用户名和密码是否正确。
-
创建一个名为
f_login的登录窗体,有两个文本框txtUsername和txtPassword,一个名为cmdLogin的按钮。 -
为
cmdLogin按钮的“单击”事件创建一个宏。 -
在宏生成器中,添加以下操作:
操作 参数 If表达式: Not IsNull(DLookup("UserID", "t_Users", "Username = '" & [Forms]![f_login]![txtUsername] & "' AND Password = '" & [Forms]![f_login]![txtPassword] & "'"))(这是一个复杂的表达式,意思是:如果在 t_Users 表中能找到一个匹配的用户名和密码,则条件为真) ...If块内的操作:CloseWindow对象类型: 窗体
对象名称: f_login
保存: 提示OpenForm窗体名称: f_main (主窗体)
视图: 窗体
窗口模式: 普通...ElseIf块内的操作:MessageBox消息: "用户名或密码错误!"
类型: 警告 -
保存宏,并将其命名为
m_Login_Click。 -
返回
f_login窗体的设计视图,选中cmdLogin按钮,在“属性表”窗格的“事件”选项卡中,将“单击”事件设置为m_Login_Click。
示例2:创建一个数据宏来记录审计日志
目标: 当 t_Orders 表中的记录被修改时,自动在 t_AuditLog 表中创建一条日志。
-
确保
t_AuditLog表存在,并包含字段:LogID(自动编号),TableName(文本),RecordID(数字, 关联订单ID),ActionType(文本, 如 "Update"),ChangedBy(文本, 用户名),ChangeDate(日期/时间)。 -
打开
t_Orders表的设计视图,切换到“数据表”选项卡,点击“数据宏” -> “创建数据宏” -> “更改后”。 -
在宏生成器中,添加以下操作:
操作 参数 SetLocalVar名称: varCurrentUser
表达式:CurrentUser()CreateRecord别名: newLog(在t_AuditLog表中创建新记录)...SetField块内的操作:SetField名称: newLog.TableName
值:"t_Orders"SetField名称: newLog.RecordID
值:[ID](当前被修改的订单ID)SetField名称: newLog.ActionType
值:"Update"SetField名称: newLog.ChangedBy
值:[varCurrentUser]SetField名称: newLog.ChangeDate
值:Now()SaveRecord(保存新创建的日志记录) -
保存这个数据宏,无论何时何地修改
t_Orders表中的数据,这条审计日志都会被自动创建。
宏与 VBA 的选择
虽然 Access 2010 的宏非常强大,但在某些情况下,VBA 仍然是更好的选择。
| 特性 | 宏 | VBA |
|---|---|---|
| 易用性 | 高,图形化界面,直观易懂。 | 低,需要编写代码,有一定的学习曲线。 |
| 功能范围 | 广泛,但仍有局限,无法直接操作文件系统、API 调用等。 | 极其强大,可以访问 Access 的所有对象模型,并调用 Windows API。 |
| 错误处理 | 较弱,错误处理机制不如 VBA 的 On Error GoTo 灵活。 |
强大,拥有完善的错误捕获和处理机制 (Try...Catch 模拟)。 |
| 性能 | 对于简单任务足够,对于复杂循环或大量数据处理,性能可能不如 VBA。 | 通常更快,尤其是在处理复杂逻辑、循环和算法时。 |
| 适用场景 | - 快速原型开发 - 简单的UI自动化 - 数据验证和审计日志 - 不想学习编程的用户 |
- 复杂的业务逻辑 - 自定义函数 - 与外部应用程序交互 - 高性能要求的任务 - 代码复用和模块化设计 |
总结建议:
- 优先使用宏:对于80%的日常自动化任务,宏已经足够强大且易于维护,从宏开始,可以大大提高开发效率。
- 切换到 VBA:当你发现宏无法实现你的需求,或者逻辑变得异常复杂、难以维护时,就应该考虑将宏转换为 VBA 模块,在宏生成器的“将宏转换为 Visual Basic Basic 代码”按钮可以帮你快速生成初始 VBA 代码。
希望这份详细的指南能帮助你掌握 Access 2010 的宏命令!
