如何在vba中使用IRibbonUI对象?

当我们在vba中定义一个变量为对象时,需要将具体的某个对象实例赋值给这个变量才能正常使用。

如下代码所示,oWK变量被定义为工作表对象,然后用set语句将第一个工作表赋值给这个变量,这个变量才具有使用价值。

Sub xyf()
    Dim oWK As Worksheet
    Set oWK = Excel.Worksheets(1)
    MsgBox oWK.Name
End Sub

类似的IRibbonUI也是一个对象,在vba中我们也可以定义一个变量为这个对象类型,然后将某个具体的实例赋值给它。

根据帮助文档中描述的IRibbonUI对象是由customUI标签中的onLoad回调函数返回的。

The object that is returned by the onLoad procedure specified on the customUI tag

在自定义功能区时可以在customUI元素中添加onLoad属性指定加载自定义功能区时执行的vba过程代码。

如下所示

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

对应的回调函数

RibbonUI_onLoad

在vba中的形式如下

Sub RibbonUI_onLoad(ribbon As IRibbonUI)

End Sub

RibbonUI_onLoad回调函数中的变量ribbon就是返回的IRibbonUI对象

由于一旦加载自定义功能区,就将调用RibbonUI_onLoad回调函数。所以可以在RibbonUI_onLoad回调函数内把ribbon赋值给定义的IRibbonUI变量。为了可以在其它过程代码中使用这个定义的变量,需要将它定义为模块级公共变量。

完整的代码如下

Dim oRUI As IRibbonUI
Sub RibbonUI_onLoad(ribbon As IRibbonUI)
    Set oRUI = ribbon
End Sub
Sub QQ1722187970()
    oRUI.Invalidate
End Sub

 

       

发表评论