如何使用应用程序级加载项对单个Excel实例的Ribbon元素进行更改?

我正在使用VSTO和VB.NET for Excel 2013.我正在开发一个应用程序级外接程序,但是我不能让两个不同的工作簿存储不同的“function区状态”。 例如,当我想启用一个button时,我使用下面的代码:

Globals.Ribbons.Ribbon1.myButton.Enable = False 

这使得在每个打开的工作簿上禁用元素“myButton”,但是我只想为其禁用一个工作簿。

我现在的做法是处理事件WorkbookActivate,以更改function区状态。 问题是:这样,用户在其他不在顶部的工作簿中看到无效状态。

有一些更好的解决方法? 没有办法pipe理function区实例(而不仅仅是像我这样做的全局元素)?

谢谢

有一些更好的解决方法? 没有办法pipe理function区实例(而不仅仅是像我这样做的全局元素)?

您需要使用callback。 尝试使用getEnabledcallback来代替。

此外,在需要时,您可以使用IRibbonUI界面方法强制Office应用程序更新UI控件。 Invalidate方法使Ribbon用户界面的所有控件的caching值无效。 请参阅IRibbonUI对象的概述 。

您可以在MSDN的以下系列文章中阅读有关Ribbon UI(又名Fluent UI)的更多信息:

  • 为开发人员定制2007 Office Fluentfunction区(第1部分,共3部分)
  • 为开发人员定制2007 Office Fluentfunction区(2/3)
  • 为开发人员定制2007 Office Fluentfunction区(3部分)