我有一个自定义 excel 功能区和一个 excel 加载项,其中包含一个在打开工作簿时实例化的类。基于类的某些属性,我需要隐藏自定义功能区中的某些按钮(都在同一个选项卡中)。
我的自定义功能区是:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="loadCustom">
<ribbon>
<tabs>
<tab id="tab1" label="customTab" getVisible="GetVisible" tag="myTab">
<group id="grp1" label="Group1" imageMso="ViewFullScreenView" getVisible="GetVisible">
<button id="Bt1" size="large" label="Button1" imageMso="AccessListIssues" onAction="runBt1" visible="true"/>
<button id="Bt2" size="large" label="Button2" imageMso="AccessListTasks" onAction="runBt2" visible="true"/>
<button id="Bt3" size="large" label="Button3" imageMso="ControlLayoutStacked" onAction="runBt3" visible="true"/>
<button id="Bt4" size="large" label="Button4" imageMso="ControlLayoutTabular" onAction="runBt4" visible="true"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
然后,我在模块中有以下 VBA 宏来加载自定义功能区和/或禁用它:
Public Sub loadCustom(ribbon As IRibbonUI)
Set RibUI = ribbon
If workbookTitle = "myWorkbook" Then
MyTag = "show"
Else
MyTag = False
RefreshRibbon MyTag
End If
End Sub
Sub GetVisible(control As IRibbonControl, ByRef visible)
If MyTag = "show" Then
visible = True
Else
If control.Tag Like MyTag Then
visible = True
Else
visible = False
End If
End If
End Sub
Sub RefreshRibbon(Tag As String)
MyTag = Tag
If RibUI Is Nothing Then
MsgBox "Error, Save/Restart your workbook"
Else
RibUI.Invalidate
End If
End Sub
在我应该加载功能区的特定工作簿中,我有一个隐藏的工作表,我的类模块类从中读取每个按钮的值以确定它是否应该显示。读取此值后,如何隐藏单个按钮?我发现的所有示例似乎只适用于标签。我可以将ribbonUI 传递给类并循环遍历每个控件吗?我一直找不到这样做的方法。谢谢你的帮助!