細品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檔案。這樣,避免使用者不小心選擇了錯誤的附加元件。
查看評論