先上一个实例截图,增强阅读博文的兴趣:
功能区是新的 Microsoft Office Fluent 用户界面的一个组件,它是一个横跨程序窗口顶部的条形带,其中包含多组命令。Office Fluent 用户界面是 Microsoft Office Access 2007 中存放各个命令的单一位置,同时也是 Access 早期版本中的菜单和工具栏的主要替代部分。
在开始使用 Office Access 2007 构建更高级的应用程序时,您可能会决定自定义 Office Fluent 功能区,以提高应用程序的易用性。例如,您可以隐藏部分或全部默认的选项卡,以使用户无法使用某些命令;您也可以创建新的自定义选项卡,并只在其中包含您要使用的命令。
在使用 Office Fluent 用户界面 的所有 2007 Microsoft Office system 程序中,您都可以使用可扩展标记语言 (XML) (可扩展标记语言 (XML):标准标记语言
(SGML) 的一种浓缩形式,开发人员可用其创建自定义标签,为整理和提供信息提供了灵活性。) 来自定义功能区。因此,掌握 XML 的一些基本知识将很有帮助。本文并不介绍 XML 的概念,而是说明自定义功能区的基本过程,同时提供一些示例 XML,您可以根据自己的需要修改这些示例。
了解功能区自定义技术
在 Office Access 2007 中,自定义功能区的方法是:先创建自定义 XML,然后通过添加代码或设置数据库属性来指示 Access 在创建功能区时使用该 XML。通过该 XML,不仅可以隐藏现有的选项卡,还可以添加新的选项卡、命令组和命令。本文中的过程将演示如何向 Access 中添加内置命令(例如“查找”、“排序”和“保存”)以及如何添加运行自行编写的 Access 宏的命令。
该 XML 可以存储在很多位置,但最简便的方法之一是将其存储在当前数据库的系统表中。该过程可描述为:创建一个名为 USysRibbons 的系统表,接着将功能区 XML 添加到该系统表中,然后指定自定义功能区是针对整个数据库显示,还是针对某个特定的窗体或报表显示。您可以定义多个自定义功能区(一个用于整个应用程序),其他功能区则用于数据库中的各个窗体或报表。
创建并应用自定义功能区
开始之前
在导航窗格中显示系统表 默认情况下,导航窗格中并不显示系统表,因此首先必须更改“导航选项”对话框中的设置,以便您在创建USysRibbons
表后能够看到它。为此,请使用以下步骤:
- 在 Access 中打开该数据库,右键单击导航窗格顶部的导航栏,然后单击快捷菜单上的“导航选项”。
- 在“导航选项”对话框中的“显示选项”下,选中“显示系统对象”复选框,然后单击“确定”。
Access 系统表将出现在导航窗格中。
启用对加载项用户界面错误消息的显示功能 在创建功能区自定义 XML 以及对其进行故障排除的过程中,错误消息是一个十分有用的信息源,因此最好让 Access 显示它们。为此,请使用以下过程:
- 单击“Office 按钮”,然后单击“Access 选项”。
- 单击“高级”。
- 在“常规”下,选中“显示加载项用户界面错误”复选框,然后单击“确定”。
创建 USysRibbons 系统表
使用此过程可创建 USysRibbons 系统表。此表以后将用于存储功能区自定义 XML。
- 在“创建”选项卡上的“表”组中,单击“表设计”。
- 向该表中添加下列字段。请确保完全按所示字段名称键入。
字段名称 类型 字段大小 ID 自动编号 长整型 RibbonName 文本 255 RibbonXml 备注 如有必要,可以向此表中添加更多字段,例如添加“注释”字段来描述功能区 XML 的功能。
- 选择“ID”字段。在“设计”选项卡上的“工具”组中,单击“主键”。
- 在“快速访问工具栏”上,单击“保存”,或者按 Ctrl+S。将新表命名为USysRibbons。
向 USysRibbons 表添加功能区自定义 XML
根据此示例的目的,假设需要防止数据库用户使用“创建”选项卡上的任何工具。此外,您还想新建一个名为“A Custom Tab”且仅包含“粘贴”命令的选项卡,如下图所示。
以下过程中的 XML 将创建此配置。
- 在导航窗格中,右键单击“USysRibbons”表,然后单击快捷菜单上的“数据表视图”。
- 向该表中添加以下数据。您可以复制本文中的 XML 示例,然后直接将其粘贴到该表中。
ID RibbonName RibbonXML (AutoNumber) My Tab <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab idMso="TabCreate" visible="false" /> <tab id="dbCustomTab" label="A Custom Tab" visible="true"> <group id="dbCustomGroup" label="A Custom Group">
<control idMso="Paste" label="Built-in Paste" enabled="true"/> </group> </tab> </tabs> </ribbon></customUI>
此 XML 首先指示 Access 不要“从头开始”,即它指定 Access 应显示默认的功能区选项卡。接下来,它指示 Access 仅隐藏一个默认选项卡(“创建”选项卡)。最后,它新建一个名为“A Custom Tab”的功能区选项卡并向该选项卡中添加名为“A Custom Group”的命令组,然后向该组中添加“粘贴”命令。有关此示例以及如何根据自身需要自定义此示例的详细信息,请参阅理解
XML 示例部分。 - 关闭 USysRibbons 表,然后关闭并重新打开该数据库。
应用自定义功能区
现在该自定义功能区 XML 已存储在表中,接下来请执行下列操作之一,具体执行哪项操作则取决于您是要向整个数据库还是向特定的窗体或报表应用该功能区。
- 向整个数据库应用自定义功能区
- 单击“Office 按钮”,然后单击“Access 选项”。
- 单击“当前数据库”,接着在“功能区和工具栏选项”下选择“功能区名称”列表,然后单击所需的功能区(在此示例中为“My
Tab”)。 - 单击“确定”。
- 向特定的窗体或报表应用自定义功能区
- 在导航窗格中,右键单击要应用该自定义功能区的窗体或报表,然后单击快捷菜单上的“设计视图”。
- 如果尚未显示属性表,请按 F4 来显示它。
- 在属性表顶部的“所选内容的类型”下,请确保从该列表中选择对象类型(“窗体”或“报表”)。
- 在属性表的“其他”选项卡上,单击“功能区名称”列表,然后单击要在打开窗体或报表时显示的功能区(在此示例中为“My Tab”)。
- 在“快速访问工具栏”上,单击“保存”,或者按 Ctrl+S。
- 关闭该窗体或报表,然后在导航窗格中通过双击将其重新打开。
此时将显示您选择的功能区。
在验证自定义功能区能够正常工作后,可以按照下列步骤再次隐藏系统表:
- 右键单击导航窗格顶部的导航栏,然后单击快捷菜单上的“导航选项”。
- 在“导航选项”对话框中的“显示选项”下,清除“显示系统对象”复选框,然后单击“确定”。
恢复默认功能区
要停止使用自定义功能区并恢复默认功能区,请使用下列过程之一,具体使用哪个过程则取决于该自定义功能区当前是由整个应用程序使用,还是由特定的窗体或报表使用。
恢复默认的应用程序级功能区
- 单击“Office 按钮”,然后单击“Access 选项”。
- 单击“当前数据库”,然后在“功能区和工具栏选项”下删除“功能区名称”框的内容。
- 关闭并重新打开该数据库。
此时,Access 将显示其默认功能区选项卡。如果您未删除该功能区 XML,它将保留在 USysRibbons 表中,因此如果您要恢复自定义功能区,可以通过将“功能区名称”选项设置回它以前包含的值来实现此目的。
恢复窗体或报表的默认功能区
- 在“设计”视图中打开窗体或报表。
- 如果尚未显示属性表,请按 F4 来显示它。
- 在属性表顶部的“所选内容的类型”下,请确保从该列表中选择对象类型(“窗体”或“报表”)。
- 在属性表的“其他”选项卡上,删除“功能区名称”属性框的内容。
- 保存并关闭该窗体或报表,然后将其重新打开。
如果您未删除该功能区 XML,它将保留在 USysRibbons 表中,因此如果您要恢复自定义功能区,可以通过将“功能区名称”属性设置回它以前包含的值来实现此目的。
理解 XML 示例
下面是本文前面使用的 XML 示例以及由它创建的自定义功能区的图示。
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab idMso="TabCreate" visible="false" /> <tab id="dbCustomTab" label="A Custom Tab" visible="true"> <group id="dbCustomGroup" label="A Custom Group"> <control idMso="Paste" label="Built-in Paste" enabled="true"/> </group> </tab> </tabs> </ribbon> </customUI>
在此示例中,XML 的第二行将 startFromScratch 属性设置为False。通过将该值设置为
False,可以确保 Access 将现有的所有选项卡保留原样,并将任何新选项卡添加到现有选项卡的右侧。如果将此属性设置为True,将删除所有现有的选项卡,并只显示您在 XML 中创建的选项卡。即使将startFromScratch
属性设置为False,您仍可以隐藏各个选项卡。XML 的第四行可说明这一点,该行代码隐藏了内置的“创建”选项卡。剩余的代码行将创建一个自定义选项卡和一个自定义组,然后使用下行
XML 代码向该组中添加内置的“粘贴”命令。
<control idMso="Paste" label="Built-in Paste" enabled="true"/>
向自定义功能区中添加其他组或控件 通过添加类似的 XML 代码行并替换不同的idMso
和 label 值,您可以向功能区中添加其他组和控件。例如,要创建一个控件,以便将当前选定的对象导出至 Excel,请使用以下 XML。
<control idMso="ExportExcel" label="Export to Excel" enabled="true"/>
要将该控件添加到“粘贴”命令所在的组中,请找到创建“粘贴”命令的代码行,然后在其紧前面或紧后面插入该新 XML 代码行。要创建新组,可以复制并粘贴以上示例中创建“A
Custom Group”组的 XML,然后进行相应的修改。下面的示例演示向自定义组中添加两个控件的 XML。
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab idMso="TabCreate" visible="false" /> <tab id="dbCustomTab" label="A Custom Tab" visible="true"> <group id="dbCustomGroup" label="A Custom Group"> <control idMso="Paste" label="Built-in Paste" enabled="true"/> </group> <group id="dbCustomGroup2" label="Another Custom Group"> <control idMso="ImportExcel" label="Import from Excel" enabled="true"/> <control idMso="ExportExcel" label="Export to Excel" enabled="true"/> </group> </tab> </tabs> </ribbon> </customUI>
此 XML 会向“A Custom Tab”添加另一个组。如下图所示,新组包含两个控件:一个用于启动从 Excel 执行导入的操作,另一个用于启动导出至
Excel 的操作。
注释 自定义功能区中的每个group id 和tab id 值都必须是唯一的。
了解命令的 idMso 值 要了解内置命令的 idMso 值,请使用以下过程:
- 单击“Office 按钮”,然后单击“Access 选项”。
- 单击“自定义”。
- 将指针移到要了解其信息的项目的上方。Access 将在屏幕提示中显示用括号括起来的控件 idMso 值。
添加运行 Access 宏的命令 通过添加运行 Access 宏的命令,您可以让自定义功能区实现更大的灵活性。例如,假设您创建了一个名为MyMacro 的宏。要向功能区中添加运行该宏的命令,请向您的
XML 中添加下行内容。
<button id="RunMyMacro" label="Run My Macro" onAction="MyMacro"/>
要将该控件添加到前面示例中的“粘贴”命令所在的组中,请找到创建“粘贴”命令的代码行,然后在其紧前面或紧后面插入该新
XML 代码行。下面的示例演示添加该命令的 XML。
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab idMso="TabCreate" visible="false" /> <tab id="dbCustomTab" label="A Custom Tab" visible="true"> <group id="dbCustomGroup" label="A Custom Group"> <control idMso="Paste" label="Built-in Paste" enabled="true"/> <button id="RunMyMacro" label="Run My Macro" onAction="MyMacro"/> </group> <group id="dbCustomGroup2" label="Another Custom Group"> <control idMso="ImportExcel" label="Import from Excel" enabled="true"/> <control idMso="ExportExcel" label="Export to Excel" enabled="true"/> </group> </tab> </tabs> </ribbon> </customUI>