无法使Excel自定义功能区回调工作

时间:2016-10-22 16:13:28

标签: xml excel vba excel-vba callback

我正在尝试创建一个按钮,我想在自定义选项卡上显示该按钮,指示用户是否在工作时拥有最新版本的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代替图像?

1 个答案:

答案 0 :(得分:1)

您不能在同一个XML按钮节点中同时拥有labelgetLabel,或imagegetImage。检查代码时,自定义UI编辑器是否标记了这个?