从Excel工作表中的宏调用后刷新功能区界面

时间:2011-11-29 09:17:24

标签: vsto ms-office excel-2007

以下是我的情景:

  • 我有一个旧的excel项目,其中包含我在vsto项目中导入的宏。
  • 我设计了一个自定义功能区(startFromScratch = true),使其看起来像独裁者应用程序。
  • 我仍然想使用现有的宏代码,因为翻译c#code中的所有vba代码需要花费太多时间
  • 我有一个标有[ComVisible(true)]属性的类,以便我可以从vba代码中调用vsto方法。

问题是我无法隐藏标签,我无法刷新功能区。我可以更改其他控件的状态(例如,为CheckBox设置选中状态),但我无法隐藏或禁用我的自定义选项卡。

我在功能区PerformLayout()上尝试了PerformDynamicLayout()ribbon.RibbonUI.Invalidate(),但没有任何效果,标签永远不会改变状态,尽管在代码中我将其可见属性设置为{{1} }。

在运行时刷新功能区需要做什么?


修改

我只是通过将功能区导出到xml来尝试相同的操作,false方法按预期工作。对于使用可视化编辑器设计的功能区,有没有办法完成此操作?

1 个答案:

答案 0 :(得分:1)

当我将功能区的StartFromScratch属性设置为True时,我已经复制了您的问题,但当我将其设置为False时,它就会消失。这是confirmed by MSDN

  

如果此属性设置为true,则无法在运行时更改自定义选项卡的可见性。

要解决此问题,请将StartFromScratch设置为False,为每个默认标签添加一个标签,将每个ControlIdType设置为OfficeOfficeId每个人都使用默认名称(TabHomeTabFormulas等),然后将每个内置标签的可见性设置为False。 (MSDN has made available a full list of control IDs用于Office应用程序以便于参考。)