我正尝试创建一个按钮,以显示在我的自定义选项卡上,该按钮指示用户是否具有最新版本的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