第8章 宏 本章要点 宏的概念、作用和类型。 宏的创建、执行与调试。 宏的应用。
8.1 宏的基本概念 宏是由一个或多个宏操作命令组成的集合,其中每个操作能够实现特定的功能,例如,打开某个窗体或打印某个报表,当宏由多个操作组成时,运行时按宏命令的排列顺序依次执行。如果用户频繁地重复一系列操作,就可以用创建宏的方式来执行这些操作。
8.1.1 宏的分类 1.根据宏所依附的位置来分类 根据宏所依附的位置,宏可以分为独立的宏、嵌入的宏和数据宏。 2.根据宏中宏操作命令的组织方式来分类 根据宏中宏操作命令的组织方式,宏可以分为操作序列宏、子宏、宏组和条件宏。
8.1.2 宏的操作界面 在“创建”选项卡的“宏与代码”命令组中,单击“宏”命令按钮,将进入宏的操作界面,其中包括“宏工具/设计”选项卡、“操作目录”窗格和宏设计窗口3个部分。宏的操作就是通过这些操作界面来实现的。 1.“宏工具/设计”选项卡 “宏工具/设计”选项卡有3个命令组,分别是“工具”、“折叠/展开”和“显示/隐藏”,如图所示。
2.“操作目录”窗格 “操作目录”窗格分类列出了所有宏操作命令,用户可以根据需要从中选择。当选择一个宏操作命令后,在窗格下半部分会显示相应命令的说明信息。“操作目录”窗格由3部分组成,分别是程序流程控制、宏操作命令和在此数据库中包含的宏对象,如图所示。
3.宏设计窗口 Access 2010重新设计了宏设计窗口,使得开发宏更为方便。当创建一个宏后,在宏设计窗口中,出现一个组合框,在其中可以添加宏操作并设置操作参数,如图所示。
添加新的宏操作有3种方式。 ①直接在“添加新操作”组合框中输入宏操作名称。 ②单击“添加新操作”组合框的向下箭头,在打开的列表中选择相应的宏操作。 ③从“操作目录”窗格中把某个宏操作拖曳到组合框中或双击某个宏操作。
8.1.3 常用的宏操作命令 Access 2010提供了66种基本的宏操作命令,在“操作目录”窗格的“操作”列表项中会显示所有的宏操作命令。在宏设计窗口中,可以调用这些基本的宏操作命令,并配置相应的操作参数,自动完成对数据库的各种操作。
8.2 宏的创建 宏的创建方法与其他对象的创建方法稍有不同,宏只能通过设计视图创建。 8.2.1 创建独立的宏 1.创建操作序列宏 例8-1 创建宏,其功能是打开“学生”表和“学生选课成绩”查询,然后先关闭查询,再关闭表,关闭前用消息框提示操作。
在“宏工具/设计”选项卡的“工具”命令组中单击“运行”命令按钮,运行设计好的宏,将按顺序执行宏中的操作。 宏是按宏名进行调用的。命名为AutoExec的宏将在打开该数据库时自动运行,如果要取消自动运行,则在打开数据库时按住Shift键即可。
2.创建子宏 创建子宏通过“操作目录”窗格中“程序流程”下的“Submacro”来实现。可通过与添加宏操作相同的方式将“Submacro”块添加到宏,然后,将宏操作添加到该块中,并给不同的块加上不同的名字。
例8-2 创建子宏,其功能是将例8-1中的6个操作分成两个宏,打开和关闭“学生”表是第1个宏,打开和关闭“学生选课成绩查询”是第2个宏,关闭前都用消息框提示操作。
如果运行的宏仅包含多个子宏,但没有专门指定要运行的子宏,则只会运行第一个子宏。在导航窗格中的宏名称列表中将显示宏的名称。如果要引用宏中的子宏,其引用格式是“宏名.子宏名”。
要将一个操作或操作集合指派给某个特定的按键,可以创建一个名为“AutoKeys”的宏,在按下特定的按键时,Access就会执行相应的操作。创建AutoKeys宏,要在子宏名称文本框中输入特定的按键。 例8-3 建立一个AutoKeys宏,当按下Ctrl+O组合键时打开“学生”表,当按下F5功能键时打开“学生选课成绩”查询。
3.创建宏组 创建宏组通过“操作目录”窗格中“程序流程”下的“Group”来实现。 注意:“Group”块不会影响宏操作的执行方式,组不能单独调用或运行。此外,“Group”块可以包含其他“Group”块,最多可以嵌套9级。 例8-4 将例8-2中的子宏改为宏组,再执行宏组。
4.创建条件操作宏 如果希望当满足指定条件时才执行宏的一个或多个操作,可以使用“操作目录”窗格中的“If”流程控制,通过设置条件来控制宏的执行流程,形成条件操作宏。 这里的条件是一个逻辑表达式,返回值是真(True)或假(False)。运行时将根据条件的结果,决定是否执行对应的操作。如果条件结果为True,则执行此行中的操作;若条件结果为False,则忽略其后的操作。
在输入条件表达式时,可能会引用窗体或报表上的控件值,引用格式为 Forms![窗体名]![控件名] 或 [Forms]![窗体名]![控件名] Reports![报表名]![控件名] [Reports]![报表名]![控件名]
例8-5 创建一个条件操作宏并在窗体中调用它,用于判断数据的奇偶性,如图所示。
8.2.2 创建嵌入的宏 嵌入的宏与独立的宏的不同之处在于,嵌入的宏存储在窗体、报表或控件的事件属性中。它们并不作为对象显示在导航窗格中的“宏”对象下面,而成为窗体、报表或控件的一部分。创建嵌入的宏与宏对象的方法略有不同。嵌入的宏必须先选择要嵌入的事件,然后再编辑嵌入的宏。使用控件向导在窗体中添加命令按钮,也会自动在按钮单击事件中生成嵌入的宏。
例8-6 在“学生”窗体的“加载”事件中创建嵌入的宏,用于显示打开“学生”窗体的提示信息。 操作步骤: ①打开“教学管理”数据库,再打开“学生”窗体,切换到设计视图或布局视图,打开“属性表”对话框,在对象列表中选择“窗体”。 ②在窗体属性表中,单击“事件”选项卡,再选择“加载”事件属性,并单击框旁边的省略号按钮,在“选择生成器”对话框中,选择“宏生成器”选项,然后单击“确定”按钮。 ③这时进入宏设计窗口,添加“MessageBox”操作,“消息”参数填“打开学生窗体”,“标题”参数填“提示”。 ④保存窗体,退出宏设计窗口。 ⑤进入窗体视图或布局视图,该宏将在“学生”窗体加载时触发运行,弹出一个提示消息框。
8.2.3 创建数据宏 1.创建事件驱动的数据宏 每当在表中添加、更新或删除数据时,都会发生表事件。可以编写一个数据宏,使其在发生这3种事件中的任一种事件之后,或发生删除或更改事件之前立即运行。 例8-7 创建数据宏,当输入“学生”表的“性别”字段时在修改前进行数据验证,并给出错误提示。
2.创建已命名的数据宏 已命名的或“独立的”数据宏与特定表有关,但不是与特定事件相关。可以从任何其他数据宏或标准宏调用已命名的数据宏。要创建已命名的数据宏,可执行下列操作。 ①在导航窗格中,双击要向其中添加数据宏的表。 ②在“表格工具/表”选项卡上的“已命名的宏”命令组中,单击“已命名的宏”命令按钮,然后单击“创建已命名的宏”命令 ③打开宏设计窗口,可开始添加操作。 若要向数据宏添加参数,可执行下列操作: ①在宏的顶部,单击“创建参数”链接项。 ②在“名称”框中输入一个唯一的名称,它是用来在表达式中引用参数的名称。在“说明”框中输入参数说明,起帮助提示作用。 若要从另一个宏运行已命名的数据宏,使用“RunDataMacro”操作。该操作为创建的每个参数提供一个框,以便可以提供必要的值。
3.管理数据宏 导航窗格的“宏”对象下不显示数据宏,必须使用表的数据表视图或设计视图中的功能区命令,才能创建、编辑、重命名和删除数据宏。
8.3 宏的运行与调试 设计完成一个宏对象或嵌入的宏后即可运行它,调试其中的各个操作。Access 2010提供了OnError和ClearMacroError宏操作,可以在宏运行过程中出错时执行特定操作。另外,SingleStep宏操作允许在宏执行过程中进入单步执行模式,可以通过每次执行一个操作来了解宏的工作状态。
8.3.1 宏的运行 1.直接运行宏 直接运行宏有以下3种方法。 ①在导航窗格中选择“宏”对象,然后双击宏名。 ②在“数据库工具”选项卡的“宏”命令组中单击“运行宏”命令按钮,弹出“执行宏”对话框。在“宏名称”下拉列表中选择要执行的宏,然后单击“确定”按钮。 ③在宏的设计视图中,单击“宏工具/设计”选项卡,再在“工具”命令组中单击“运行”命令按钮。
2.从其他宏中执行宏 如果要从其他的宏中运行另一个宏,必须在宏设计视图中使用RunMacro宏操作命令,要运行的另一个宏的宏名作为操作参数。 3.自动执行宏 将宏的名字设为“AutoExec”,则在每次打开数据库时,将自动执行该宏,可以在该宏中设置数据库初始化的相关操作。 4.通过响应事件运行宏 在实际的应用系统中,设计好的宏更多的是通过窗体、报表或或控件上发生的“事件”触发相应的宏或事件过程,使之投入运行。
例8-8 在窗体中显示要打开或关闭的表,在窗体命令按钮“单击”事件中加入宏来控制打开或关闭所选定的表。
8.3.2 宏的调试 在Access中提供了单步执行的宏调试工具。使用单步跟踪执行,可以观察宏的执行流程和每一步操作的结果,便于分析和修改宏中的错误。 例8-9 利用单步执行,观察例8-1中创建的“操作序列宏”的执行流程。
8.4 宏的应用 1.用宏控制窗体 宏可以对窗体进行很多操作,包括打开、关闭、最大化、最小化等,下面通过建立一个AutoExec宏来说明用宏控制窗体的操作。AutoExec宏会在打开数据库时触发,可以利用该宏启动“登录对话框”窗体。 例8-10 利用AutoExec宏自动启动“登录对话框”窗体。
2.利用宏创建自定义菜单和快捷菜单 在Access 2010中利用宏可以为窗体、报表创建自定义菜单,也可以创建快捷菜单,下面以实例说明自定义菜单的创建方法。
例8-11 利用宏创建3级菜单,一级菜单包括“文件”、“编辑”和“退出”3个菜单项,其中“文件”菜单包括“打开窗体”、“打印预览”两个二级菜单,这两个二级菜单又分别包含3个三级菜单,“编辑”菜单包含3个二级菜单,“退出”菜单包含两个二级菜单。
3.使用宏取消打印不包含任何记录的报表 当报表不包含任何记录时,打印该报表就没有意义。在Access 2010中可向报表的“无数据”事件过程中添加宏。只要运行没有任何记录的报表,就会触发“无数据”事件。当打开报表不包含任何数据时,发出警告信息,单击“确定”关闭警告消息时,宏也会关闭空报表。 例8-12 使用宏取消打印不包含任何记录的报表。