程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> 為Access2007創建一個應用程序級的自定義Ribbon——Office2007 用戶界面(UI

為Access2007創建一個應用程序級的自定義Ribbon——Office2007 用戶界面(UI

編輯:關於Access數據庫
   如果您有疑問或建議,請進入技術討論區交流 >>>

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>
這段標記創建了一個新的LoadCustomUI Demo選項卡,包含有一個“Load Forms”組。在該組內,Ribbon為應用程序中的每個窗體(Form1和Form2)顯示一個按鈕,並指定每個按鈕在單擊時應該調用的HandleOnAction回調過程。此外,該標記為每個按鈕設置Tag屬性,以便於代碼應該打開的包含的Access窗體的名稱。
6、添加下面的代碼到相同的模塊中。該過程提供回調行為,打開所選窗體並設置其RibbonName屬性到FormNames Ribbon定制。
Public Sub HandleOnAction(control As IRibbonControl)
    ‘ 裝載指定的窗體
    ‘ 設置其RibbonName屬性以便顯示自定義UI.
    DoCmd.OpenForm control.Tag
    Forms(control.Tag).RibbonName = “FormNames”
End Sub
7、保存該數據庫,關閉VBE。
8、如果應用程序只包含一個窗體,則創建窗體使得應用程序至少包含兩個窗體。
9、確定應用程序的開啟窗體,並且在設計視圖中打開該窗體。
10、在屬性窗口裡的事件選項卡中,找到onLoad事件屬性,單擊屬性值右側的省略號(…)按鈕,選擇選項列表中的“代碼生成器”,然後單擊“確定”。(如果沒有看到屬性窗口,在設計選項卡中單擊“屬性表”。)
11、在VBE中,修改Form_Load過程,其代碼如下所示。
Private Sub Form_Load()
    CreateFormButtons
    Me.RibbonName = “FormNames”
End Sub
12、在菜單“工具”中,單擊“引用”,選擇“Microsoft Office 12.0 Object Library”(需要對該對象庫的引用來使用IRibbonControl類),然後單擊“確定”。
13、保存該數據庫,關閉VBE。
14、單擊“Office按鈕”,然後單擊“Access選項”。
15、單擊“當前數據庫”選項卡。
16、在應用程序選項部分,從窗體的顯示窗體列表中選擇啟動窗體,然後單擊“確定”。
17、關閉並重新打開該數據庫。
啟動窗體打開,帶有包含顯示應用程序裡每個窗體的按鈕組的自定義選項卡。單擊任何一個按鈕,Access打開相應的窗體,保持相同的自定義UI。
除了已介紹的技術外,可以通過使用COM加載項添加 Ribbon定制 到Access2007中。COM加載項提供添加自定義RibbonX功能作為組件包的好處,而不需要在每個應用程序中添加VBA代碼。在 Access2007 中執行加載項就像在其它Office應用程序中一樣。
注意:雖然可以使用Visual Studio 2005共享加載項模板為Access創建一個COM加載項,但不能夠使用 Visual Studio 2005 Tools for Office Second Edition來為Access創建COM加載項。Access是Visual Studio 2005 Tools for Office Second Edition不支持的應用程序之一。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved