細品RibbonX(52):如何共用Ribbon定製之在正在使用的多個Office版本中部署Excel解決方案,ribbonxribbon

來源:互聯網
上載者:User

細品RibbonX(52):如何共用Ribbon定製之在正在使用的多個Office版本中部署Excel解決方案,ribbonxribbon
細品RibbonX(52):如何共用Ribbon定製之在正在使用的多個Office版本中部署Excel解決方案

資料整理來自於論壇
完整版:http://download.csdn.net/download/nodeman/10264659

 

 Loading ...

 

除非每個人都在使用Office 2007,因而知道在仍使用老的Office版本中如何部署附加元件檔案是非常有協助的。
舊的命令欄定製仍然工作嗎?
考慮安裝Office 2007的Office開發人員面臨的最大的問題之一是“我的定製在全新的功能區中仍然工作嗎?”回答是肯定的。定製仍然工作,只是已經在不顯眼的地方。即這些定製將會自動出現在Office 2007應用程式的“附加元件”選項卡中。
下面,介紹幾種在不同環境中部署Excel解決方案的方法。
方法1:建立單獨的版本
在帶有多個Office版本的環境中部署解決方案的第一種方法是最明顯的:為應用程式的每種檔案格式建立一個版本。
方法2:從新的附加元件中調用以前的版本
在帶有多個Office版本的環境中工作的另一種方法是:建立傳統的載入宏或通用範本來包含2007檔案的RibbonX介面。在2007檔案中使用Application.Run方法,可以調用儲存在傳統檔案中的過程。採用這種方法,傳統的檔案實際上包含了所有的功能代碼,而2007檔案只是擔當啟動器。
使用2003 Excel附加元件作為2007 附加元件的裝載器
遷移2003檔案處理2003環境以及擔當2007檔案的背景過程最好按照下列三個步驟:

  • 建立基本的2007功能區定製附加元件。
  • 對2003載入宏做必需的修改。
  • 連結到2007檔案確保2003檔案首先被開啟。

事件的順序是重要的,以便不會在繼續時引起崩潰。最後一點是,確保使用者在沒有2003版時決不要裝載該檔案的2007版,2003版包含著2007版運行需要的所有宏代碼。
首先,建立基本的2007附加元件部分。開啟Excel,建立新活頁簿,將在預設的AddIns檔案夾中以ForumLauncher_2007.xlam來儲存。關閉Excel,在CustomUI Editor中開啟該檔案,輸入下面的XML代碼來建立功能區定製:

<customUIxmlns="http://schemas.microsoft.com/office/2006/01/customui">
      <ribbonstartFromScratch="false">
            <tabs>
                  <tabidMso="TabDeveloper">
                        <groupid="rxgrpForums"
                               label="Forums">
                               <buttonid="rxbtnRibbonX"
                                     label="Patrick Schmid's RibbonX Forum"
                                     onAction="rxsharedLinks_click"
                                    imageMso="HyperlinkInsert"
                                     tag="RibbonX"/>
                               <buttonid="rxbtnVBAX"
                                     label="VBA Express"
                                     onAction="rxsharedLinks_click"
                                    imageMso="HyperlinkInsert"
                                     tag="VBAX"/>
                        </group>
                  </tab>
            </tabs>
      </ribbon>
</customUI>

上述代碼在“附加元件”選項卡的末尾的自訂群組中添加了兩個按鈕。注意,按鈕使用了共用的回調rxsharedLinks_click,使用了tag屬性。
驗證代碼並儲存,複製回調簽名,關閉CustomUI Editor。開啟Excel並安裝該附加元件。轉到VBE,導航到ForumLauncher工程,插入一個新模組,粘貼回調簽名,並作如下修改:

Sub rxsharedLinks_click(control As IRibbonControl)
    Application.Run "LaunchFrom2007", control.Tag
End Sub

這個過程使用Application.Run方法從另一個開啟的檔案中啟動宏,指定了要啟動的宏的名字LaunchFrom2007,還有一個參數:控制項的標籤。
儲存後卸載該附加元件。
下一步,對2003載入宏作必需的修改,即ForumLauncher_v2003.xla。
首先,修改開始代碼確保菜單不會被建立在“附加元件”選項卡中,然而在Excel 2003中仍然是菜單。使用下列步驟測試版本並裝載正確的菜單。開啟VBE,導航到ForumLauncher_v2003.xla工程,展開ThisWorkbook模組,修改Workbook_Open過程如下:

Private Sub Workbook_Open()
    Dim wbAddin As AddIn
    Dim bInstalled As Boolean
    Dim s2007Filename As String
 
    s2007Filename = Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m"
 
    If Val(Application.Version) < 12 Then
        Call CreateMenu
    Else
        '檢查是否安裝了附加元件
        For Each wbAddin In Application.AddIns
            If wbAddin.Name = s2007Filename Then
                '附加元件已安裝,開啟它
                Workbooks.Open ThisWorkbook.Path & Application.PathSeparator & s2007Filename
                bInstalled = True
                Exit For
            End If
        Next wbAddin
 
        '如果需要安裝附加元件
        If Not bInstalled Then Application.AddIns.Add _
           ThisWorkbook.Path & Application.PathSeparator & s2007Filename
    End If
End Sub

Workbook_Open事件現在完成如下操作:

  • 通過將2003附加元件檔案名稱中的2003替換為2007,然後添加m到結果字串中,從而捕獲2007附加元件的名字並賦值給變數。
  • 檢查應用程式的版本,如果版本小於12,則建立菜單。
  • 如果版本不小於12,檢查2007附加元件是否已經安裝。
  • 如果2007版附加元件已安裝,則裝載檔案並記錄2007版本已安裝。
  • 評估bInstalled屬性。如果為假,那麼安裝附加元件。

因為我們已經在2003檔案被啟動時安裝並開啟了2007檔案,所以結束時明確地卸載2007檔案。為此,需要修改Workbook_BeforeClose過程來檢查版本並且卸載2007附加元件:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Val(Application.Version) > 11 Then
        Workbooks(Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m").Close
    Else
        Call DeleteMenu
    End If
End Sub

同理,如果檔案版本小於12,那麼已經裝載了2003菜單修改,因此需要觸發DeleteMenu過程。如果應用程式的版本不小於12,那麼需要代碼關閉2007附加元件檔案。
最後,對2003附加元件需要提供輸入焦點以便2007版本的檔案能夠調用過程。當在Excel 2003或更早的版本中單擊功能表按鈕時觸發下列兩個過程:

Private Sub Launch_VBAX()
    '啟動VBAX網站
    ActiveWorkbook.FollowHyperlink (sVBAXURL)
End Sub
 
Private Sub Launch_RibbonX()
    '啟動RibbonX論壇
    ActiveWorkbook.FollowHyperlink (sRibbonXURL)
End Sub

接著,在標準模組中添加下面的過程:

Public Sub LaunchFrom2007(sSiteToLaunch)
    '從2007附加元件中擔當裝載器
    Select Case UCase(sSiteToLaunch)
        Case Is = "VBAX"
            Call Launch_VBAX
        Case Is = "RIBBONX"
            Call Launch_RibbonX
    End Select
End Sub

Case語句評估單擊的控制項,並從2003檔案中啟動合適的宏。
現在,我們已經完成了需要的轉換,儲存2003 xla載入宏並卸載。回到2007附加元件,強迫使用者首先開啟2003版。
再次安裝2007版的附加元件。開啟VBE,導航到ForumLauncher_v2007.xlam工程,在ThisWorkbook模組中插入下列代碼:

Private Const sReqdAddin = "Forum_Launcher_v2003.xla"
 
Private Sub Workbook_Open()
    Dim wbTest As Workbook
 
    On Error Resume Next
    Set wbTest = Workbooks(sReqdAddin)
    If Err.Number = 0 Then
        '附加元件開啟
        On Error GoTo 0
        Exit Sub
    End If
 
    '附加元件必須被開啟
    On Error GoTo 0
    MsgBox "You must load " & sReqdAddin & " to use " & ThisWorkbook.Name
    ThisWorkbook.Close savechanges:=False
End Sub

好了!轉換完成。儲存檔案並再次卸載該附加元件。
現在來測試。開啟附加元件管理器,安裝2003版本的附加元件,可以在開發工具選項卡的右側看到完整的功能組,如所示。

返回到附加元件管理器,卸載2003版,安裝2007版,單擊“確定”返回使用者介面,此時會顯示如所示的錯誤訊息。

轉到VBE,你將看到2003版和2007版的附加元件檔案都沒有被裝載。此時,裝載2007 xlam附加元件的唯一方法是首先裝載2003的xla檔案。這樣,避免使用者不小心選擇了錯誤的附加元件。

 

 

 

 

 

 

 

 

 

查看評論

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.