我正在尝试创建一个按钮,我想在自定义选项卡上显示该按钮,指示用户是否在工作时拥有最新版本的Excel加载项。我打算通过在用户打开Excel实例时将Last Modified
文件的原始xlam
写入文件来检查是否具有最新版本。然后在Workbook_Open
事件中,我会发起OnTime
行动来比较日期和时间。每15分钟在文件中写入公共文件Last Modified
的时间。这是因为用户在部署更新时打开了任何Excel实例,因为他们必须关闭所有实例,然后重新打开Excel以获得最新版本。
无论如何,有了这样的背景,我遇到状态按钮的回调问题。我的想法是在最初打开excel时让按钮显示绿色检查并且标记为最新,因为在这种情况下,Excel将具有当前版本而不是已保存的缓存版本在临时文件中。然后,如果updateCheck
子触发它发现有更新的版本可用,我想将按钮图像更改为感叹号,并将标签更改为立即更新。
问题是,似乎每当我尝试通过使用自定义UI编辑器在按钮元素上设置任何回调(默认onAction
除外)时,功能区不会再显示在Excel中。如果我没有在按钮上进行任何回调并且在功能区本身上只有onLoad
回调,那么在打开Excel时会显示功能区,并且onLoad
事件会触发(使用{{1进行测试) }})。下面是我的XML和VBA代码
在Module1中:
MsgBox
XML代码:
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
使用上面的代码我只是试图看看我是否可以使回调工作(我不能)。
最后,问题:
我究竟做错了什么?为了确保在<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
代替图像?
答案 0 :(得分:1)
您不能在同一个XML按钮节点中同时拥有label
和getLabel
,或image
和getImage
。检查代码时,自定义UI编辑器是否标记了这个?