在 Microsoft Access 中,附加到用户界面 (UI) 对象(如命令按钮、文本框、窗体和报表)的宏称为 UI 宏。 这将区别于附加到表的数据宏。 可以使用 (UI) 宏自动执行一系列操作,例如打开另一个对象、应用筛选器、开始导出操作以及执行许多其他任务。 本文将介绍新重新设计的宏生成器,并展示创建 UI 宏时所涉及的基本任务。
注意
本文不适用于 Access Web 应用。
本文内容
- 概述
- 宏生成器
- 创建独立宏
- 创建嵌入宏
- 向宏添加操作
- 使用 If、Else、If 和 Else 控制程序流
- 创建子宏
- 将相关操作组合在一起
- 展开和折叠宏操作或块
- 复制并粘贴宏操作
- 与他人共享宏
- 运行宏
- 调试宏
- 将宏转换为 VBA 代码
概述
宏可以包含在宏对象中 (有时称为独立宏) ,也可以嵌入到窗体、报表或控件的事件属性中。 嵌入宏成为嵌入它们的对象或控件的一部分。 宏对象在导航窗格的 宏下可见;嵌入式宏则不会。
每个宏都由一个或多个宏操作组成。 根据您所处的上下文,某些宏操作可能无法使用。
宏生成器
以下是宏生成器的一些主要功能亮点。
- 操作目录 宏操作按类型整理且可搜索。
- IntelliSense 键入表达式时,IntelliSense 会建议可能的值并让你选择正确的值。
- 键盘快捷方式 使用组合键可以更快、更轻松地编写宏。
- 程序流程 使用注释行和操作组创建更易读的宏。
- 条件语句 通过支持嵌套 If/Else/Else If,允许执行更复杂的逻辑。
- 宏重用 操作目录显示您创建的其他宏,以便您可以将它们复制到您正在处理的宏中。
- 更轻松地共享 复制宏,然后将其作为 XML 粘贴到电子邮件、新闻组文章、博客或代码示例网站中。
下面的视频将引导你了解宏生成器的主要区域。
创建独立宏
此过程将创建一个独立宏对象,该对象将显示在导航窗格的 “宏” 下。 如果要在应用程序的许多位置重复使用宏,则独立宏非常有用。 通过从其他宏调用宏,可以避免在多个位置复制相同的代码。
在“创建”选项卡上的“宏和代码”组中,单击“宏”。
Access 打开宏生成器。
在快速访问工具栏上,单击“ 保存”。
在 “另存为” 对话框中,键入宏的名称,然后单击“确定”。
继续执行“ 向宏添加操作”部分。
创建嵌入宏
此过程将创建一个嵌入在对象的事件属性中的宏。 此类宏不会显示在导航窗格中,但可以从加载 时 或 单击时等事件调用。
由于宏将成为窗体或报表对象的一部分,因此建议使用嵌入宏来自动执行特定于特定窗体或报表的任务。
在导航窗格中,右键单击将包含该宏的窗体或报表,然后单击“ 布局视图”。
如果尚未显示属性表,请按 F4 显示该表。
单击包含要在其中嵌入宏的事件属性的控件或部分。 还可以使用属性表顶部“ 选择类型 ”下的下拉列表 (控件或分区或整个窗体或报表) 。
在“属性表”任务窗格中,单击 “事件 ”选项卡。
单击要触发宏的事件的属性框。 例如,对于命令按钮,如果希望在单击按钮时运行宏,请单击“ 单击时” 属性框。
如果属性框中包含文字 [嵌入宏],这意味着已为此事件创建宏。 可以通过继续执行此过程中的其余步骤来编辑宏。
如果属性框包含文字 [事件过程],这意味着已为此事件创建Visual Basic for Applications (VBA) 过程。 在事件中嵌入宏之前,需要删除该过程。 您可以通过删除 [Event Procedure] 一词来执行此操作,但您应该首先检查事件过程,以确保删除它不会破坏数据库中所需的功能。 在某些情况下,可以使用嵌入宏重新创建 VBA 过程的功能。
单击 “构建 ”按钮
。如果出现“ 选择生成器 ”对话框,请确保已选择“ 宏生成器 ”,然后单击“ 确定”。
Access 打开宏生成器。 继续执行下一部分,向宏添加操作。
向宏添加操作
操作是构成宏的单个命令,每个命令都根据其功能命名,例如 FindRecord 或 CloseDatabase。
步骤 1:浏览或搜索宏操作
添加操作的第一步是在 Add New Action 下拉列表或 Action Catalog 中查找它。
注意
默认情况下, “添加新操作” 下拉列表和“操作目录”仅显示将在不受信任的数据库中执行的操作。 查看所有操作:
- 在 “设计 ”选项卡的 “显示/隐藏 ”组中,单击“ 显示所有操作”。
如果未显示“操作目录”,请在“ 设计 ”选项卡的“ 显示/隐藏 ”组中,单击 “操作目录”。
要查找操作,请使用以下方法之一:
- 单击“ 添加新操作 ”下拉列表中的箭头,然后向下滚动以找到操作。 首先列出程序流元素,然后按字母顺序列出宏操作。
- 在“操作目录”窗格中浏览操作。 操作按类别分组。 展开每个类别以查看操作。 如果选择操作,则操作的简短说明将显示在操作目录的底部。
- 通过在窗格顶部的搜索框中键入内容,在“操作目录”窗格中搜索操作。 键入时,将筛选操作列表以显示包含该文本的所有宏。 Access 会在宏名称及其说明中搜索输入的文本。
步骤 2:向宏添加操作
找到所需的宏操作后,使用以下方法之一将其添加到宏中:
在“ 添加新操作” 列表中选择一个操作,或者只需开始在框中键入操作名称即可。 Access 会在显示“ 添加新操作” 列表的点添加操作。
将操作从“操作目录”拖动到宏窗格。 此时会出现一个插入栏,显示释放鼠标按钮时操作将插入的位置。
在操作目录中双击操作。
如果在宏窗格中选中了一个操作,Access 将在所选操作的正下方添加新操作。
如果在宏窗格中选中了 Group、 If、 Else If、 Else 或 Submacro 块,Access 会将新操作添加到该块。
如果宏窗格中未选择任何操作或块,则 Access 会将新操作添加到宏的末尾。
注意
如果已创建一个或多个宏,则它们将列在操作目录中的“ 在此数据库中” 节点下。
- 将独立宏 (“ 宏) ” 下列出的宏拖动到宏窗格中,将创建一个 RunMacro 操作来运行拖入的宏。 然后,可以使用下拉列表调用子宏(如果存在)。
- 如果只想将操作从独立宏复制到当前宏 (,而不是创建 RunMacro 操作) ,请在操作目录中右键单击它,然后单击“ 添加宏副本”。
- 将嵌入宏 (窗体或报表对象) 下列出的宏拖动到宏窗格中,会将该宏中的操作复制到当前宏中。
也可以通过将数据库对象从导航窗格拖动到宏窗格来创建操作。 如果将表、查询、窗体、报表或模块拖动到宏窗格中,Access 将添加一个操作来打开表、查询、窗体或报表。 如果将另一个宏拖动到宏窗格中,Access 会添加运行该宏的操作。
步骤 3:填充参数
大多数宏操作至少需要一个参数。 可以通过选择操作然后将指针移到参数上来查看每个参数的说明。 对于许多参数,可以从下拉列表中选择值。 如果参数要求键入表达式,则 IntelliSense 会在键入时建议可能值来帮助输入表达式,如下图所示:
看到要使用的值时,通过双击该值或使用箭头键将其突出显示,然后按 Tab 或 Enter 键将其添加到表达式中。
有关创建表达式的详细信息,请参阅 表达式简介一文。
关于将 IntelliSense 与 Web 数据库中的属性配合使用
在与 Web 兼容的窗体上创建嵌入的 UI 宏时,IntelliSense 允许你向表达式中添加任何窗体属性。 但是,在 Web 数据库中,只能使用 UI 宏访问表单属性的子集。 例如,在名为 Form1 的窗体上给定一个名为 Control1 的控件,IntelliSense 将允许添加 [Forms]![Form1]![Control1]。[ControlSource] 添加到 UI 宏中的表达式。 但是,如果随后将数据库发布到 Access Services,则包含该表达式的宏在服务器上运行时将生成错误。
下表显示了可以在 Web 数据库的 UI 宏中使用的属性:
移动操作
操作按宏的顶部到底部的顺序执行。 要在宏中向上或向下移动操作,请使用以下方法之一:
- 将操作向上或向下拖动到所需的位置。
- 选择操作,然后按 Ctrl + 向上键或 Ctrl + 向下键。
- 选择操作,然后单击宏窗格右侧的 “上移 ”或“ 下移 ”箭头。
删除操作
若要删除宏操作,请执行以下操作:
选择操作,然后按 Delete 键。 或者,您可以单击 删除 (X) 宏窗格右侧的按钮。
注意
- 如果删除操作块(例如 If 块或 组 块),则该块中的所有操作也会被删除。
- “上移”、“下移”和“删除”命令也可在右键单击宏操作时显示的快捷菜单上使用。
使用 If、Else、If 和 Else 控制程序流
若要仅在某些条件为 true 时执行宏操作,请使用 If 块。 这将替换早期版本的 Access 中使用的 “条件” 列。 可以使用 Else If 和 Else 块扩展 If 块,类似于其他顺序编程语言(如 VBA)。
下图显示了一个简单的 If 块,包括 Else If 和 Else 块:
如果 ExpirationDate 字段小于当前日期,则执行 If 块。
如果 ExpirationDate 字段等于当前日期,则执行 Else If 块。
如果前面的块均不这样做,则 Else 块将执行。
If 块到此结束。
向宏添加 If 块
- 从“添加新操作”下拉列表中选择“如果”,或将其从“操作目录”窗格拖动到宏窗格。
- 在 If 块顶部的框中,键入一个表达式用于确定何时执行该块。 表达式必须是布尔 (,即计算结果为 Yes 或 No) 。
- 通过从块中显示的“添加新操作”下拉列表中选择操作,或通过将它们从“操作目录”窗格拖动到“If 块”,向“If ”块添加操作。
将 Else 或 If 块添加到 If 块
选择“如果”块,然后在块的右下角单击“添加其他”或“添加其他”。
如果要添加 Else If 块,请键入一个表达式来确定何时执行该块。 表达式必须是布尔 (,也就是说,计算结果为 True 或 False) 的表达式。
通过从块中显示的“添加新操作”下拉列表中选择操作,或将它们从“操作目录”窗格拖动到块中,向 Else If 或 Else 块添加操作。
注意
- 添加 If、 Else If 和 Else 块的命令在右键单击宏操作时显示的快捷菜单上可用。
- 如果 块可以嵌套最多 10 层。
创建子宏
每个宏可以包含多个子宏。 子宏设计为按 RunMacro 或 OnError 宏操作中的名称调用。
将 子宏 块添加到宏的方式与添加宏操作的方式相同,如向 宏添加操作一节中所述。 添加 子宏 块后,可以将宏操作拖动到其中,或从块中显示的“ 添加新操作 ”列表中选择操作。
注意
还可以通过选择一个或多个操作,右键单击它们,然后选择“创建子宏块”来创建子宏块。
子宏必须始终是宏中的最后一个块;除了子宏下方) 更多子宏外,不能 (添加任何操作。 如果运行的宏仅包含子宏,但没有专门命名所需的子宏,则只有第一个子宏将运行。
若要调用子宏 (例如,在事件属性中,或者使用 RunMacro 操作或 OnError 操作) ,请使用以下语法:
macroname.submacroname
将相关操作组合在一起
可以通过将操作组合在一起并向组分配有意义的名称来提高宏的可读性。 例如,可以将打开和筛选窗体的操作分组到名为“打开并筛选窗体”的组中。这样可以更轻松地查看哪些操作彼此相关。 组块不会影响操作的执行方式,并且不能单独调用或运行组。 它的主要用途是标记一组操作,以帮助您在阅读宏时理解宏。 此外,在编辑大型宏时,您可以将每个组块折叠为单行,从而减少您必须执行的滚动量。
如果要分组的操作已在宏中,请使用以下过程将它们添加到 组 块中:
- 选择要分组的操作。
- 右键单击所选操作,然后单击“ 生成组块”。
- 在 组 块顶部的框中,键入组的名称。
如果操作尚不存在:
- 将 组 块从操作目录拖动到宏窗格。
- 在 组 块顶部的框中,键入组的名称。
- 将宏操作从“操作目录”拖动到 “组 ”块中,或从块中显示的“ 添加新操作” 列表中选择操作。
组 块可以包含其他 组 块,并且嵌套深度最多可达 9 个级别。
展开和折叠宏操作或块
创建新宏时,宏生成器将显示所有参数均可见的宏操作。 根据宏的大小,您可能希望在编辑宏时折叠部分或全部宏操作 (和操作) 块。 这样可以更轻松地获取宏结构的整体视图。 可以根据需要展开部分或全部操作进行编辑。
展开或折叠单个宏操作或块
- 单击宏或块名称左侧的加号 (+) 或减号 (-) 号。 或者,按向上键和向下键选择操作或块,然后按向左键或向右键折叠或展开它。
展开或折叠所有宏操作 (但不包括阻止)
- 在 “设计 ”选项卡的“ 折叠/展开 ”组中,单击 “展开操作” 或 “折叠操作”。
展开或折叠所有宏操作和块
- 在 “设计 ”选项卡的“ 折叠/展开 ”组中,单击 “全部展开 ”或“ 全部折叠”。
提示
可以通过将指针移到操作上来“速览”折叠的操作内部。 Access 会在工具提示中显示操作参数。
复制并粘贴宏操作
如果需要重复已添加到宏的操作,可以复制和粘贴现有操作,就像在文字处理器中处理文本段落一样。 粘贴操作时,它们会插入到当前所选操作的正下方。 如果选中了块,则操作将粘贴到块内。
提示
要快速复制所选操作,请按住 Ctrl 键并将操作 () 拖动到宏中要复制它们的位置。
与他人共享宏
当你将宏操作复制到剪贴板时,它们可以作为可扩展标记语言 (XML) 粘贴到任何接受文本的应用程序中。 这样,你可以通过电子邮件将宏发送给同事,或将宏发布到论坛、博客或其他网站上。 然后,收件人可以复制 XML 并将其粘贴到其 Access 宏生成器中。 宏将按照您编写它的方式重新创建。
运行宏
可以使用下列任一方法运行宏:
- 双击导航窗格中的宏。
- 使用 RunMacro 或 OnError 宏操作调用宏。
- 在对象的事件属性中输入宏名称。 触发该事件时,宏将运行。
调试宏
如果在运行宏时遇到问题,可以使用一些工具来找到问题的根源。
向宏添加错误处理操作
我们建议在编写每个宏时向它们添加错误处理操作,并将它们永久保留在宏中。 如果使用此方法,Access 会在错误发生时显示描述。 错误描述可帮助你了解错误,以便更快地更正问题。
使用以下步骤将错误处理子宏添加到宏:
- 在“设计”视图中打开宏。
- 在宏底部,从“添加新操作”下拉列表中选择“子宏”。
- 在字词 “子宏”右侧的框中,键入子宏的名称,例如 ErrorHandler。
- 从子宏块中显示的“添加新操作”下拉列表中,选择 MessageBox 宏操作。
- 在 “消息 ”框中,键入以下文本: =[MacroError].[描述]
- 在宏底部,从“添加新操作”下拉列表中选择 OnError。
- 将 “转到 ”参数设置为“ 宏名称”。
- 在 “宏名称 ”框中,键入错误处理子宏 (本示例中 ErrorHandler) 的名称。
- 将 OnError 宏操作拖到宏的最顶部。
下图显示了具有 OnError 操作的宏和名为 ErrorHandler 的子宏。
OnError 宏操作位于宏顶部,并在发生错误时调用 ErrorHandler 子宏。
ErrorHandler 子宏仅在 OnError 操作调用时运行,并显示描述错误的消息框。
使用单步命令
单步执行是一种宏调试模式,可用于一次执行一个宏操作。 执行每个操作后,将显示一个对话框,显示有关该操作的信息以及因此而发生的任何错误代码。 但是,由于“宏单步”对话框中没有错误说明,因此建议使用上一节中介绍的错误处理子宏方法。
若要启动单步模式:
- 在“设计”视图中打开宏。
- 在 “设计 ”选项卡的 “工具 ”组中,单击 “单个步骤”。
- 保存并关闭宏。
下次运行宏时,将显示“ 宏单步” 对话框。 对话框显示有关每个操作的以下信息:
- 宏名称
- If 块) 的条件 (
- 操作名称
- 参数
- 错误编号 (错误编号为 0 表示未发生错误)
逐步执行操作时,单击对话框中的三个按钮之一:
要查看有关宏中下一个操作的信息,请按 “步骤”。
要停止当前正在运行的任何宏,请单击 “停止所有宏”。 下次运行宏时,单步模式仍将有效。
若要退出单步模式并继续运行宏,请单击 “继续”。
注意
- 如果在宏中的最后一个操作后按 “步骤” ,则下次运行宏时,“单一步”模式仍将有效。
- 若要在宏运行时进入单步模式,请按 CTRL+BREAK。
- 若要在宏中的特定点进入单步模式,请在该点添加 单步 宏操作。
- 单一步模式在 Web 数据库中不可用。
将宏转换为 VBA 代码
宏提供 Visual Basic for Applications (VBA) 编程语言中可用的部分命令。 如果确定需要的功能超出宏所能提供的功能,可以轻松地将独立宏对象转换为 VBA 代码,然后利用 VBA 提供的扩展功能集。 但是请记住,VBA 代码不会在浏览器中运行;仅当数据库在 Access 中打开时,才会运行添加到 Web 数据库的任何 VBA 代码。
注意
不能将嵌入的宏转换为 VBA 代码。
若要将宏转换为 VBA 代码,请执行以下操作:
- 在导航窗格中,右键单击该宏对象,然后单击“设计视图”。
- 在 “设计 ”选项卡的“ 工具 ”组中,单击“ 将宏转换为 Visual Basic”。
- 在“ 转换宏 ”对话框中,指定是否要将错误处理代码和注释添加到 VBA 模块,然后单击 “转换”。
Access 确认宏已转换,并打开 Visual Basic 编辑器。 双击“项目”窗格中的“已转换的宏”以查看和编辑模块。