2007年8月3日
一.建立功能区
一、XML
首先,要确定功能区要包含的内容,本文假设,要建立如下图所示的功能区。

其中:
- 打开罗斯文商贸(Access 2007 示例数据库中的 Home 窗体)
- 压缩和修复数据库(Access 2007 系统功能)
- 关闭数据库(调用回调函数,实现关闭当前数据库)
并且在数据库打开时就加载这个功能区。
为了实现上述功能,需要建立如下的 XML 内容:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onLoadRibbon">2
<ribbon startFromScratch="true">3
<fileMenu>4
<button idMso="OpenDatabase" visible="false"/>5
<button idMso="CloseDatabase" visible="false"/>6
<button idMso="NewDatabase" visible="false"/>7
<button idMso="SaveAs" visible="false"/>8
<splitButton idMso="AccessSaveAsMenu" visible="false"/>9
</fileMenu>10
<tabs>11
<tab id="tabMain" label="Ribbon 测试程序">12
<group id="grpHome" label="Home">13
<button id="cmdHome" label="打开罗斯文商贸" imageMso="MeetingsWorkspace" size="large" onAction="onOpenFormEdit" tag="Home"/>14
<button idMso="CompactDatabase" size="large"/>15
<button id="cmdClose" label="关闭数据库" imageMso="CloseDatabase" size="large" onAction="onCloseDatabase"/>16
</group>17
</tab>18
</tabs>19
</ribbon>20
</customUI>在第一行指明自定义功能区的架构为 http://schemas.microsoft.com/office/2006/01/customui。
第二行的“startFromScrath="true"”表示关闭原来的功能区。
<fileMenu>节点描述 Access 文件菜单。
<tabs>节点描述自定义功能区的分组和分组中的按钮等。
二、编写 XML
可以使用任意的本文编辑器来编写 XML,但是使用 Visual Studio 2005 或者 Visual Web Developer 2005 速成版这样的工具来得更为方便快捷,并且在指定 customUI功能区架构后,能够方便使用智能提示功能方便快捷的书写功能区XML,下面以 Visual Studio 2005 为例来说明如何编写功能区XML。
首先,从 http://officeblogs.net/UI/customUI.xsd 下载 customUI 的架构文件。然后打开 Visual Studio 2005,然后文件菜单上点击[新建文件],选择[XML 文件],点击[打开],如下图:

然后,删除文件中的“<?xml version="1.0" encoding="utf-8"?>” 。

打开 XML 文档属性,选择[架构]如下图:

在 XSD 架构对话框中,添加上面下载回来的 customUI.xsd。

这样就能使用智能提示功能,快速地编写功能区XML。

二.编写回调函数
回调函数的目的是完成功能区上控件所执行的功能。在上一篇文章中的 XML 内容中,第一行:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="onLoadRibbon">onLoad 属性值为 onLoadRibbon,即表示在加载功能区时调用 onLoadRibbon 函数,这个函数要用 VBA 来进行书写。
一、建立 Access 应用程序
新建一个数据库,命名为功能区.accdb,导入 Northwind2007.accdb 数据库中所有对象(示例中要用一些对象)。按 Alt+F11 键进入 VBE。为了使用功能区对象,首先必须引用 Microsoft Office 12.0 Object Library。

二、建立模块
为了统一管理,将所有回调函数放在同一个模块中,在 VBE 中新建一个模块,命名为 basRibbonCallbacks。为了以后能方便地使用自定义的功能区对象,定义一个全局对象变量 gobjRibbon,并 onLoad 指定的回调函数 onLoadRibbon 中进行赋值。
Option Compare Database2
Option Explicit3

4
' ------------------------------5
' 本模块包含 Ribbon 回调子程序6
' ------------------------------7

8
Public gobjRibbon As IRibbonUI9

10
' 自定义 Ribbon 加载时事件处理11
Public Sub onLoadRibbon(Ribbon As IRibbonUI)12
' 将自定义 Ribbon 对象设置为全局对象13
14
Set gobjRibbon = Ribbon15
End Sub实现功能区中的“打开罗斯文商贸”控件的onOpenFormEdit 回调函数,通过功能区中的 Tag 属性实现传递要打开的窗体名,在本例中,<button id="cmdHome" label="打开罗斯文商贸" imageMso="MeetingsWorkspace" size="large" onAction="onOpenFormEdit" tag="Home"/>,cmdHome 按钮控件的 Tag 属性为“Home”,指定要打开的窗体为“Home”。
' 通过 Ribbon 中的 Tag 属性实现传递要打开的窗体2
Public Sub onOpenFormEdit(control As IRibbonControl)3
' 以编辑方式打开窗体4
DoCmd.OpenForm control.Tag, , , , acFormEdit5
End Sub实现功能区中的“关闭数据库”的onCloseDatabase 回调函数。
Public Sub onCloseDatabase(control As IRibbonControl)2
DoCmd.CloseDatabase3
End Sub创建功能区系统数据表
讲述了如何创建功能区XML,那么这个 XML 如何使用呢?
对于 Access 2007 来说,要将这个 XML 的内容存储在一个名为 USysRibbons 的系统表中,才能使用。
一、创建 USysRibbons 表
在上一讲中,建立了Ribbon.accdb 数据库,打开这个数据库,在系统的功能面板上选择[插入]面板,在[表和列表]上点击[表]按钮,创建新表。

新加两个字段:RibbonName 和功能区XML,其中,RibbonName 为“文本”类型,RibbonXML 为“备注”类型,将其保存为 USysRibbons:

二、设置 Access 选项
由于这个以 USys 开头的系统表,在默认设置的情况下,在导航面板中是看不到的,因此,要设置 Access 的选项才能将其显示在导航面板中。点击 Access 的文件菜单按钮,即 Access 左上角的图标,再点击[Access 选项]按钮:

选择左侧的[启动],然后在右侧点击[Navigation Options...]按钮:

在“导航选项”对话框中,勾选“显示系统对象”:

三、输入 XML
从[导航面板]打开 USysRibbons 表,插入一条新记录,在功能区Name 中输入“Main”,在功能区XML 字段中输入第一讲编写的 XML 的内容:

这样,就将 XML 保存到了 USysRibbons 表中。在一个应用程序中可以设计多个功能区,每个功能区对应一条记录。它们可以应用在应用启动时、关联窗体和报表。
四.应用自定义的功能区
在 Access 2007 中文版中,其 ID 对应于 USysRibbons 表中的功能区Name,它在这个表中是唯一不可重复的。
一、设置为启动应用程序时加载自定义的功能区
在 Access 的选项设置中,设置其工具栏选项的自定义功能区ID,即可在应用程序启动时加载自定义的功能区。
点击 Access 文件按钮-[Access 选项]-[启动],在右侧的工具栏选项下的[自定义功能区ID]的下拉列表中选择“Main”:

二、设置关联窗体或报表的自定义功能区
每个窗体和报表均可以有自己的功能区。在窗体和报表的设计状态,设置窗体或报表的“自定义功能区ID”,即可。

这个窗体运行时,就会打开属于自己的功能区,如下图。

关于 Access 自定义功能区的开发和使用已全部讲完。
资源:
http://blogs.msdn.com/access/
http://msdn.microsoft.com/office/tool/ribbon/default.aspx
http://msdn2.microsoft.com/en-us/ms406046(office.12).aspx
----------
本文作者:朱亦文

0 回复,0 引用: [图文]Access 2007功能区运用祥细讲解
添加回复