我正嘗試創建一個按鈕,以顯示在我的自定義選項卡上,該按鈕指示用戶是否具有最新版本的Excel加載項工作中。我計劃在用戶打開一個Excel實例時,通過將xlam
文件的原始Last Modified
寫入文件來檢查它們是否具有最新版本。然後在Workbook_Open
事件中,我將啓動一個OnTime
操作,將文件中寫入的日期&與每15分鐘公開文件的Last Modified
的日期進行比較。這是爲了防止用戶在部署更新時打開任何Excel實例,因爲他們必須關閉所有實例,然後重新打開Excel才能獲得最新版本。無法使Excel自定義功能區回調正常工作
無論如何,有了這種背景,我遇到了狀態按鈕的回調問題。我的想法是讓按鈕顯示一個綠色的支票,並在最初打開excel時標籤爲最新的,因爲在這種情況下,Excel將具有當前版本,而不是保存在臨時文件中的緩存版本。然後,如果updateCheck
子啓動時發現有更新的版本可用,我想將按鈕圖像更改爲感嘆號並將標籤更改爲立即更新。
問題是,似乎每當我試圖通過使用自定義用戶界面編輯器將按鈕元素(除默認onAction
以外)上的任何回調函數功能區不再顯示在Excel中。如果我沒有對按鈕進行任何回調,並且色帶本身只有onLoad
回調,則打開Excel和onLoad
事件觸發(用MsgBox
測試)時,色帶顯示正常。下面是我的XML和VBA代碼
在模塊1:
Public myRibbonUI As IRibbonUI
'Callback for customUI.onLoad
Sub RibbonLoaded(ribbon As IRibbonUI)
Set myRibbonUI = ribbon
MsgBox ("Ribbon Loaded")
End Sub
'Callback for customButton getImage
Sub GetButtonImage(control As IRibbonControl, ByRef returnedVal)
MsgBox (returnedVal)
End Sub
'Callback for customButton getLabel
Sub GetButtonLabel(control As IRibbonControl, ByRef returnedVal)
MsgBox (returnedVal)
End Sub
'Callback for customButton onAction
Sub ButtonClick(control As IRibbonControl)
'Invalidates the cache of a single control
MsgBox ("Fire!")
myRibbonUI.InvalidateControl ("customButton")
End Sub
XML代碼:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="RibbonLoaded">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="Custom Tab">
<group id="customGroup" label="Custom Group">
<button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="ButtonClick" getImage="GetButtonImage" getLabel="GetButtonLabel"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
與上面的代碼,我只是簡單地想看看我是否能獲得工作的回調(我不能)。
最後,問題: 我在做什麼錯?爲了確保在xlam
文件中使用它不僅僅是一個問題,我嘗試使用xlsm
文件,我仍然得到相同的結果。
後續問題: 如何將圖像更改爲另一個imageMso
?我已經看到人們使用圖像更改自定義圖像,但我是否也使用圖像更改爲另一個imageMso
,或者是否使用imageMso
代替回調過程中的圖像?
我實際上直到昨天才知道有一個驗證功能* headdesk *。另外,這是我第一次使用回調工作。謝謝,在刪除'label'和'image'標籤後,它工作正常! – CaffeinatedCoder