当作为VBA .xlam加载时,功能区失效在Excel 2007中不起作用

时间:2013-10-17 17:58:59

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

这是一个奇怪的头搔一个!

我有一个用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"

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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)