- 創(chuàng)建基本的2007功能區(qū)定制加載項(xiàng)。
- 對(duì)2003加載宏做必需的修改。
- 鏈接到2007文件確保2003文件首先被打開(kāi)。
事件的順序是重要的,以便不會(huì)在繼續(xù)時(shí)引起崩潰。最后一點(diǎn)是,確保用戶在沒(méi)有2003版時(shí)決不要裝載該文件的2007版,2003版包含著2007版運(yùn)行需要的所有宏代碼。
首先,創(chuàng)建基本的2007加載項(xiàng)部分。打開(kāi)Excel,創(chuàng)建新工作簿,將在默認(rèn)的AddIns文件夾中以ForumLauncher_2007.xlam來(lái)保存。關(guān)閉Excel,在CustomUI Editor中打開(kāi)該文件,輸入下面的XML代碼來(lái)創(chuàng)建功能區(qū)定制:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"><ribbon startFromScratch="false"><tabs><tab idMso="TabDeveloper"><group id="rxgrpForums" label="Forums"><button id="rxbtnRibbonX" label="Patrick Schmid's RibbonX Forum" onAction="rxsharedLinks_click" imageMso="HyperlinkInsert" tag="RibbonX"/><button id="rxbtnVBAX" label="VBA Express" onAction="rxsharedLinks_click" imageMso="HyperlinkInsert" tag="VBAX"/></group></tab></tabs></ribbon></customUI>
上述代碼在“加載項(xiàng)”選項(xiàng)卡的末尾的自定義組中添加了兩個(gè)按鈕。注意,按鈕使用了共享的回調(diào)rxsharedLinks_click,使用了tag屬性。
驗(yàn)證代碼并保存,復(fù)制回調(diào)簽名,關(guān)閉CustomUI Editor。打開(kāi)Excel并安裝該加載項(xiàng)。轉(zhuǎn)到VBE,導(dǎo)航到ForumLauncher工程,插入一個(gè)新模塊,粘貼回調(diào)簽名,并作如下修改:
Sub rxsharedLinks_click(control As IRibbonControl)Application.Run "LaunchFrom2007", control.TagEnd Sub
這個(gè)過(guò)程使用Application.Run方法從另一個(gè)打開(kāi)的文件中啟動(dòng)宏,指定了要啟動(dòng)的宏的名字LaunchFrom2007,還有一個(gè)參數(shù):控件的標(biāo)簽。
保存后卸載該加載項(xiàng)。
下一步,對(duì)2003加載宏作必需的修改,即ForumLauncher_v2003.xla。
首先,修改開(kāi)始代碼確保菜單不會(huì)被創(chuàng)建在“加載項(xiàng)”選項(xiàng)卡中,然而在Excel 2003中仍然是菜單。使用下列步驟測(cè)試版本并裝載正確的菜單。打開(kāi)VBE,導(dǎo)航到ForumLauncher_v2003.xla工程,展開(kāi)ThisWorkbook模塊,修改Workbook_Open過(guò)程如下:
Private Sub Workbook_Open()Dim wbAddin As AddInDim bInstalled As BooleanDim s2007Filename As String s2007Filename = Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m" If Val(Application.Version) < 12 ThenCall CreateMenuElse'檢查是否安裝了加載項(xiàng) For Each wbAddin In Application.AddInsIf wbAddin.Name = s2007Filename Then'加載項(xiàng)已安裝,打開(kāi)它 Workbooks.Open ThisWorkbook.Path & Application.PathSeparator & s2007FilenamebInstalled = TrueExit ForEnd IfNext wbAddin '如果需要安裝加載項(xiàng) If Not bInstalled Then Application.AddIns.Add _ThisWorkbook.Path & Application.PathSeparator & s2007FilenameEnd IfEnd Sub
Workbook_Open事件現(xiàn)在完成如下操作:
- 通過(guò)將2003加載項(xiàng)文件名中的2003替換為2007,然后添加m到結(jié)果字符串中,從而捕獲2007加載項(xiàng)的名字并賦值給變量。
- 檢查應(yīng)用程序的版本,如果版本小于12,則創(chuàng)建菜單。
- 如果版本不小于12,檢查2007加載項(xiàng)是否已經(jīng)安裝。
- 如果2007版加載項(xiàng)已安裝,則裝載文件并記錄2007版本已安裝。
- 評(píng)估bInstalled屬性。如果為假,那么安裝加載項(xiàng)。
因?yàn)槲覀円呀?jīng)在2003文件被啟動(dòng)時(shí)安裝并打開(kāi)了2007文件,所以結(jié)束時(shí)明確地卸載2007文件。為此,需要修改Workbook_BeforeClose過(guò)程來(lái)檢查版本并且卸載2007加載項(xiàng):
Private Sub Workbook_BeforeClose(Cancel As Boolean)If Val(Application.Version) > 11 ThenWorkbooks(Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m").CloseElseCall DeleteMenuEnd IfEnd Sub
同理,如果文件版本小于12,那么已經(jīng)裝載了2003菜單修改,因此需要觸發(fā)DeleteMenu過(guò)程。如果應(yīng)用程序的版本不小于12,那么需要代碼關(guān)閉2007加載項(xiàng)文件。
最后,對(duì)2003加載項(xiàng)需要提供輸入點(diǎn)以便2007版本的文件能夠調(diào)用過(guò)程。當(dāng)在Excel 2003或更早的版本中單擊菜單按鈕時(shí)觸發(fā)下列兩個(gè)過(guò)程:
Private Sub Launch_VBAX()'啟動(dòng)VBAX網(wǎng)站 ActiveWorkbook.FollowHyperlink (sVBAXURL)End Sub Private Sub Launch_RibbonX()'啟動(dòng)RibbonX論壇 ActiveWorkbook.FollowHyperlink (sRibbonXURL)End Sub
接著,在標(biāo)準(zhǔn)模塊中添加下面的過(guò)程:
Public Sub LaunchFrom2007(sSiteToLaunch)'從2007加載項(xiàng)中擔(dān)當(dāng)裝載器 Select Case UCase(sSiteToLaunch)Case Is = "VBAX"Call Launch_VBAXCase Is = "RIBBONX"Call Launch_RibbonXEnd SelectEnd Sub
Case語(yǔ)句評(píng)估單擊的控件,并從2003文件中啟動(dòng)合適的宏。
現(xiàn)在,我們已經(jīng)完成了需要的轉(zhuǎn)換,保存2003 xla加載宏并卸載?;氐?007加載項(xiàng),強(qiáng)迫用戶首先打開(kāi)2003版。
再次安裝2007版的加載項(xiàng)。打開(kāi)VBE,導(dǎo)航到ForumLauncher_v2007.xlam工程,在ThisWorkbook模塊中插入下列代碼:
Private Const sReqdAddin = "Forum_Launcher_v2003.xla" Private Sub Workbook_Open()Dim wbTest As Workbook On Error Resume NextSet wbTest = Workbooks(sReqdAddin)If Err.Number = 0 Then'加載項(xiàng)打開(kāi) On Error GoTo 0Exit SubEnd If '加載項(xiàng)必須被打開(kāi) On Error GoTo 0MsgBox "You must load " & sReqdAddin & " to use " & ThisWorkbook.NameThisWorkbook.Close savechanges:=FalseEnd Sub
好了!轉(zhuǎn)換完成。保存文件并再次卸載該加載項(xiàng)。
現(xiàn)在來(lái)測(cè)試。打開(kāi)加載項(xiàng)管理器,安裝2003版本的加載項(xiàng),可以在開(kāi)發(fā)工具選項(xiàng)卡的右側(cè)看到完整的功能組,如下圖所示。
返回到加載項(xiàng)管理器,卸載2003版,安裝2007版,單擊“確定”返回用戶界面,此時(shí)會(huì)顯示如下圖所示的錯(cuò)誤消息。
轉(zhuǎn)到VBE,你將看到2003版和2007版的加載項(xiàng)文件都沒(méi)有被裝載。此時(shí),裝載2007 xlam加載項(xiàng)的唯一方法是首先裝載2003的xla文件。這樣,避免用戶不小心選擇了錯(cuò)誤的加載項(xiàng)。