【问题标题】:Can't get Excel Custom Ribbon Callbacks to work无法使 Excel 自定义功能区回调工作
【发布时间】:2016-10-24 09:25:27
【问题描述】:

我正在尝试创建一个按钮,我想在我的自定义选项卡上显示该按钮,以指示用户是否在工作中使用我的 Excel 插件的最新版本。我计划在用户打开 Excel 实例时通过将 xlam 文件的原始 Last Modified 写入文件来检查他们是否拥有最新版本。然后在Workbook_Open 事件上,我将启动OnTime 操作,以每15 分钟将文件中写入的日期和时间与公共文件Last Modified 的日期和时间进行比较。这是为了防止用户在我部署更新时打开任何 Excel 实例,因为他们必须关闭所有实例,然后重新打开 Excel 才能获得最新版本。

无论如何,有这样的背景,我在回调状态按钮时遇到了麻烦。我的想法是在最初打开 excel 时让按钮显示绿色复选标记并具有 Up-to-date 标签,因为在这种情况下 Excel 将具有当前版本而不是保存的缓存版本在临时文件中。然后,如果updateCheck 子触发它发现有更新的版本可用,我想将按钮图像更改为感叹号,并将标签更改为 立即更新

问题是,似乎每当我尝试使用自定义 UI 编辑器在按钮元素(默认的 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?我见过有人使用 image 更改自定义图像,但我是否也使用 image 更改为另一个 imageMso 还是在回调过程中使用 imageMso 代替 image?

【问题讨论】:

    标签: xml vba excel callback


    【解决方案1】:

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

    【讨论】:

    • 直到昨天headdesk,我才真正知道有验证功能。此外,这是我第一次使用回调。谢谢,虽然在删除 labelimage 标签后仍然有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多