2013-10-22 16 views
3

我創建了一個簡單的Excel加載項來演示如何保存項目並將其自動加載爲功能時onLoad事件未觸發的問題.xlam,但以.xlsm打開時可以正常工作。我已經檢查過Excel 2007(帶有相應的xmlns),2010(x32)和2013(x32),並且它在加載爲.xlam時在所有情況下都失敗。在Excel VBA中,onLoad ribbon回調失敗(未觸發/正常工作).xlam

示例只有一個按鈕,應該導致一個標誌被切換,然後使功能區無效,然後通過GetLabel回調切換按鈕的標籤。

它作爲.xlsm文件打開時工作,但不會從用戶XLSTART文件夾(不進行Windows註冊表更改)自動加載爲.xlam加載項時運行。問題似乎是onLoad事件不是從.xlam版本觸發的,因此onLoadRibbon procudure沒有運行,也沒有Ribbon對象失效。

<customUI onLoad="onLoadRibbon" xmlns="http://schemas.microsoft.com/office/2009/07/customui"> 
    <ribbon startFromScratch="false"> 
     <tabs> 
      <tab idQ="TabInsert"> 
       <group id="GroupTest" label="2010" insertBeforeMso="GroupInsertLinks"> 
        <button id="ButtonTest" 
         getLabel="GetLabel" 
         onAction="ButtonClick"/> 
       </group> 
      </tab> 
     </tabs> 
    </ribbon> 
</customUI> 

而這裏的相應的附加VBA代碼:

Option Explicit 

Public Toggle As String 
Public myRibbonUI As IRibbonUI 

' Ribbon callback : runs when ribbon is loaded 
Public Sub onLoadRibbon(ribbon As IRibbonUI) 
    ' Get a reference to the ribbon 
    Set myRibbonUI = ribbon 
    Debug.Print "Ribbon Reference Set" 
    MsgBox "Ribbon Reference Set" 
End Sub 

' Ribbon callback : runs when ribbon button is clicked 
Public Sub ButtonClick(control As IRibbonControl) 
    ' Invalidate the ribbon so that the label of the button toggles between "true" and "false" 
    myRibbonUI.Invalidate 
    Debug.Print "Ribbon Invalidated" 
End Sub 

' Ribbon callback : runs when ribbon is invalidated 
Public Sub GetLabel(control As IRibbonControl, ByRef label) 
    ' Toggle the label for the button to indicate that the callback has worked 
    Toggle = IIf(Toggle = "State 1", "State 2", "State 1") 
    label = Toggle 
    Debug.Print "Ribbon Button Label Toggled" 
End Sub 

爲什麼不在.xlam這方面的工作?

回答

3

我能夠按照您的規格成功創建並運行加載項。

首先,我使用上面的customUI.xml創建了* .xlsm。注意:我在Excel 2007中,所以我使用了其他xlmns,具體如http://schemas.microsoft.com/office/2006/01/customui。我接下來添加了色帶處理代碼,然後重新打開工作簿以驗證色帶功能。我立即收到一個消息框「Ribbon Reference Set」(我默認啓用了宏)。我確認「插入」選項卡上有您的額外按鈕,並且它會切換。

其次,我將xlsm保存爲Excel加載項* .xlam。我通過雙擊手動打開了xlam文件,所有的功能都出現在上面的第一個測試中。

第三,我安裝了外接通過Excel文件Menu --->Options --->Add-Ins --->Manage Excel Add-Ins --->Go。我打開了一個不相關的Excel工作簿,並驗證了加載項與之前的測試加載相同。我使用相同的菜單卸載了加載項。

四,我導航到C:\Program Files(x86)\並驗證了Excel.exe可執行文件的位置,然後找到了XLSTART文件夾。我將xlam放入文件夾並打開不相關的Excel工作簿,並能夠驗證Add-In的功能與以前一樣。

我知道上述內容並不直接回答你的問題,但是測試這些情況並讓我們比較結果以找出它可能分解的位置。

編輯:

在回答您的意見,當我* .xlam手動複製到%APPDATA%\Microsoft\Excel\XLSTART文件夾,它按預期工作。在我的Windows 7機器上,路徑評估爲C:\Users\username\AppData\Roaming\Microsoft\Excel\XLSTART。如您所述,我在Excel選項中驗證了這是默認的受信任位置。

+0

謝謝史蒂夫。嗯。唯一可以看到的是,我將.xlam放在USER XLSTART文件夾中:%APPDATA%/ Microsoft/Excel/XLSTART,它也是默認的受信任位置。我必須嘗試使用​​的App文件夾。 –

+0

您可能會檢查的一件事是,如果您有多個加載項定義了相同的功能區對象,我可以想象如果發生這種情況,他們會導致衝突,即使控件/部分被創建,也會阻止您的代碼運行。通過雙擊手動打開* .xlam時是否工作? – Blackhawk

3

我知道這是一箇舊的帖子...但我有一個類似的問題,並尋找解決方案的小時。

在我的情況下,根本原因很簡單,很難找到:我有兩個不同的AddIns - 但由於複製和粘貼,我錯過了重命名第二個回調函數。
回調過程的名稱在整個Excel實例中必須是唯一的。

因此,只需嘗試重命名VBA代碼中的回調過程(當然也可以在XML中)!

+0

我有沒有在Excel 2007中調用onload,但在2013年罰款。所以不是那個問題。並使用2006年的模式,而不是2009年的模式。 – Tuntable

相關問題