【问题标题】:Ribbon Invalidate doesn't work in Excel 2007 when loaded as a VBA .xlam当加载为 VBA .xlam 时,功能区无效在 Excel 2007 中不起作用
【发布时间】:2013-10-23 01:24:38
【问题描述】:

这是一个奇怪的挠头!

我有一个用 VBA 编写的跨 MSO 插件,它使用相同的 XML 定义、功能区控件和 VBA 回调过程。它适用于 PowerPoint 2007、2010 和 2013(x32 和 x64)、Excel 2010 和 2013(x32 和 x64)。

但是,它仅在 Excel 2007 中作为源 .xlsm 加载时有效

当保存和加载为 .xlam(使用注册表 OPENX 方法或将 .xlam 复制到 XLSTART 文件夹)时,它会失败。

当我调用一个过程以使ribbonUI 对象无效以便根据其各自回调过程中的图像/状态刷新库控件(其下方有按钮)时发生故障。我检查了对功能区对象的引用没有丢失,但是调用 invalidate 方法不会导致功能区控件调用它们各自的回调过程,因此它们不会被刷新。

我已尝试通过将以下元素添加到 2007 XML 部分中的图库定义来解决此问题,虽然这确实解决了图像项刷新问题,但按钮仍然不调用回调过程。

invalidateContentOnDrop="true"

我没有发布任何代码,因为我不确定哪一点有助于诊断这种奇怪的行为,但可以根据要求这样做!

有什么想法吗?

【问题讨论】:

    标签: vba excel excel-2007 excel-addins ribbonx


    【解决方案1】:

    哦。

    在发现令人眼花缭乱的事情之后,现在这个问题已经解决了!!!

    问题是我已经安装了另一个插件,它在 XML/VBA 代码中使用了相同的 onLoadRibbon 签名,所以插件之间存在串扰,这把一切都搞砸了!我不明白为什么它会影响 2007 年和 2010 年(后来测试),但 2013 年并没有表现出这个问题。

    无论如何,我现在已经将两个插件中的相应签名和 XML 代码更改如下:

    插件 1

    XML:

    <customUI onLoad="app1LoadRibbon" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    

    VBA:

    Public Sub app1LoadRibbon(ByVal ribbonUI As IRibbonUI)
    

    插件 2

    XML:

    <customUI onLoad="app2LoadRibbon" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    

    VBA:

    Public Sub app2LoadRibbon(ByVal ribbonUI As IRibbonUI)
    

    【讨论】:

    • 很高兴您发现了这两个插件之间的混淆。
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2011-12-10
    相关资源
    最近更新 更多