为Access2007创建一个应用程序级的自定义Ribbon
2009-10-28 15:16:57 来源:WEB开发网(二) 在运行时装载定制
如果想在运行时装载静态的定制,则将这些定制存储在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>
这段标记创建了一个新的LoadCustomUI Demo选项卡,包含有一个“Load Forms”组。在该组内,Ribbon为应用程序中的每个窗体(Form1和Form2)显示一个按钮,并指定每个按钮在单击时应该调用的HandleOnAction回调过程。此外,该标记为每个按钮设置Tag属性,以便于代码应该打开的包含的Access窗体的名称。
更多精彩
赞助商链接