VBA从IRibbonUI获取参数

时间:2016-02-04 02:27:48

标签: vba excel-vba excel

所以我有一个看起来像

的自定义功能区
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="RibbonLoadFunc" >

和一个功能

Private Sub RibbonLoadFunc(Ribbon As IRibbonUI)
    MsgBox "Hello World"
End Sub

因此,当我打开文档时,它会打印出#Hello; Hello World&#34;在预期的屏幕上。现在,我的问题是因为对IRibbonUI的引用传递给函数,我可以获取底层元素的字段值吗?由于功能区被定义为XML文档,我想我应该能够访问所述文档中的所有元素。所以,例如,如果我也有

<tab id="myTab">
    <group id="myGroup">
        <button id="myButton" onAction="someAction" label="someLabel"/>
    </group>
</tab>

有没有办法打印myButton的标签,&#34; someLabel&#34;,而不是&#34; Hello World&#34;?

或者,有没有办法将常量传递给IRibbonUI的onLoad函数?

1 个答案:

答案 0 :(得分:2)

这个问题与过于宽泛有关,你真的需要对使用Ribbon XML进行一些广泛的研究。自从新的JS API发布以来,Microsoft在隐藏文档方面做得非常好,所以我编译了一个链接列表并将其发布在MSDN论坛中:https://social.msdn.microsoft.com/Forums/office/en-US/ba8c9d0b-7312-4503-8167-f2ef86f17435/information-on-the-office-fluent-ui-ribbon-for-developers?forum=officegeneral。我建议您从“为开发人员自定义Office 2007 Fluent UI”这一系列的3部分开始。

简而言之,功能区UI通过“回调”与代码交互 - 所有交互必须由功能区本身启动。当您习惯使用VBA时,无法“查询”Ribbon对象及其控件。只要您想要的功能区仅需要其功能区设计器支持的功能,VSTO扩展就会提供此功能。但是在背景中或多或少地与我在下面描述的方式有效。

你的RibbonLoadFunc就是这样一个回调。它通常用于将功能区分配给VBA模块中的“全局”RibbonUI对象。使用它,您可以随时触发InvalidateInvalidateControl方法。

同时在加载功能区时触发RibbonLoadFunc,触发其他控件的“get”属性。这些用于动态填充标签和图像等内容。如果您想在某个时刻更改这些动态设置,那就是当InvalidateInvalidateControl发挥作用时 - 它们会强制“get”回调运行。

您还可以使用这些“get”回调来填充其他全局对象以及有关控件的信息,以便您可以在Ribbon环境“之外”使用该信息。

这基本上是您的问题的答案:您不能使用RibbonLoadFunc来访问和显示有关其他功能区控件的信息。但触发RibbonLoadFunc的相同“加载”也可以提供有关您想要“知道”的相应“get”回调的任何控件的信息。

例如,如果按钮的XML中有getLabel =“SubInVBA”属性,则可以动态地将标签分配给按钮,同时将该信息存储在全局变量中并显示它(任何时候你想要的,来自变量)在MsgBox中。