您现在的位置: 万盛学电脑网 >> 程序编程 >> 数据库 >> access教程 >> access基础教程 >> 正文

为Access2007创建一个应用程序级的自定义Ribbon——Office2007

作者:佚名    责任编辑:admin    更新时间:2022-06-22

为Access2007创建一个应用程序级的自定义Ribbon

(一) 创建一个 Access2007 应用程序级的自定义Ribbon

1、开启Access2007,打开一个已存在的数据库或创建一个新数据库。
2、单击“office按钮”,单击“Access选项”,然后单击“高级”选项卡。
3、在“常规”部分,选择选项“显示加载项用户接口错误”(在不同的应用程序中,该选项可能在不同的位置)。
4、单击“确定”关闭Access选项对话框。
接下来,创建一个包含自定义XML标记的表。
5、在Access2007中,右键单击导航窗格,单击“导航选项”,选中“显示系统对象”前的复选框。(除非设置了该选项,否则将不可能在导航窗格中查看USysRibbons表。)单击“确定”按钮,Access系统表将出现在导航窗格中。
6、在“创建”选项卡中,单击“表设计”。
7、在表中添加下面的字段。
表:在USysRibbons表中定义的字段

字段名称 数据类型
ID 自动编号
RibbonName 文本
RibbonXml 备注

8、选择ID字段,在“设计”选项卡中选择“主键”。
9、单击“Office按钮”,然后单击“保存”,将新表命名为USysRibbons。
10、右键单击USysRibbons选项卡,然后单击“数据表视图”。
11、添加下面的数据到所创建的字段中。
表:USysRibbons表数据

字段名称 值
ID (自动编号)
RibbonName HideData
RibbonXml 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>
这段标记设置startfromScratch属性为False,然后隐藏内置的“创建”选项卡。接着,创建一个自定义选项卡和自定义组,并将内置的粘贴控件添加到组中。
12、关闭该表。
13、关闭并重新打开数据库。
14、单击“Office 按钮”,然后单击“Access选项”。
15、单击“当前数据库”选项卡,向下滚动到“功能区和工具栏选项”部分。
16、在“功能区名称”下拉列表中,选择“HideData”,单击“确定”按钮。
17、关闭并重新打开该数据库。
此时,“创建”选项卡已不在功能区中,Fluent UI包括了“A Custom Tab”选项卡,其中包含“A Custom Group”组,带有内置的“粘贴”按钮。
18、要恢复功能区,则需要打开“Access选项”对话框,删除“功能区名称”选项中的内容,然后关闭并重新打开数据库,此时Access2007将显示其缺省的Fluent UI。
注意:也可以从USysRibbons表中使用一个功能区,为指定的窗体或报表提供UI。要进行这样的操作,在设计或布局模式下打开窗体或报表,然后设置窗体的RibbonName属性为想要使用的Ribbon的名称。在设置该属性之前,必须选择窗体自身,而不是窗体中的任何控件或选择。

(二) 在运行时装载定制

如果想在运行时装载静态的定制,则将这些定制存储在USysRibbons表中,并且在需要时设置窗体或报表的RibbonName属性。但是,如果需要创建动态的定制,则调用Application.LoadCustomUI方法。下面的示例创建一个Ribbon定制,显示应用程序中每个窗体的按钮,处理每个按钮的onAction回调来装载请求的窗体。
创建动态的Ribbon定制
1、将前面内容中所使用的数据库装载到Access 2007中。如果数据库中只有一个窗体,则创建一个新窗体并在每个窗体中添加一至两个控件。
2、在“创建”选项卡中的“其他”组中,单击“宏”按钮的下拉列表,然后单击“模块”。
3、在VBE中的菜单“视图”中,单击“属性窗口”。
4、在“属性”窗口中,将名称(Name)属性框中模块的名称改为RibbonLoader。
5、在代码窗口中,输入下面的代码。虽然该方法不会返回值,但必须是一个函数,否则不能够从Access宏中调用。

Function CreateFormButtons()
  Dim xml As String
  xml = _
   “<customUI xmlns=”" http://schemas.microsoft.com/ ” & _
   “office/2006/01/customui”">” & vbCrLf & _
   “  <ribbon startFromScratch=”"false”">” & vbCrLf & _
   “    <tabs>” & vbCrLf & _
   “      <tab id=”"DemoTab”" label=”"LoadCustomUI Demo”">” & _
     vbCrLf & _
   “        <group id=”"loadFormsGroup”" label=”"Load Forms”">” & _
     vbCrLf & _
   “{0}” & vbCrLf & _
   “        </group>” & vbCrLf & _
   “      </tab>” & vbCrLf & _
   “    </tabs>” & vbCrLf & _
   “  </ribbon>” & vbCrLf & _
   “</customUI>”

  Dim template As String
  template = “<button id=”"load{0}Button”" ” & _
   “label=”"Load {0}”" onAction=”"HandleOnAction”" ” & _
   “tag=”"{0}”"/>” & vbCrLf
 
  Dim formContent As String
  Dim frm As AccessObject
  For Each frm In CurrentProject.AllForms
    formContent = formContent & _
     Replace(template, “{0}”, frm.Name)
  Next frm
 
  xml = Replace(xml, “{0}”, formContent)
  Debug.Print xml
  On Error Resume Next
  ‘ 如果从AutoExec宏中调用这段代码,
  ‘ 如果在USysRibbons表中有一个使用相同名称的定制
  ‘ 则会失败
  Application.LoadCustomUI “FormNames”, xml
End Function

当运行该段代码时,如果应用程序中包含有名为Form1和Form2的两个窗体,则会创建像下面的XML的标记。
<customUI xmlns=”http://schemas.microsoft.com/office/2006/01/customui“>
  <ribbon startFromScratch=”false”>
    <tabs>
      <tab id=”DemoTab” label=”LoadCustomUI Demo”>
        <group id=”loadFormsGroup” label=”Load Forms”>
            <button id=”loadForm2Button” label=”Load Form2″ onAction=”HandleOnAction” tag=”Form2″/>
            <button id=”loadForm1Button” label=”Load Form1″ onAction=”HandleOnAction” tag=”Form1″/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
这段标记创建了一个新的L