我有一个自定义的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传递给类并通过每个控件循环吗?我一直无法找到这样做的方法。谢谢你的帮助!
,我打算给getVisible回调添加到我的XML,像这样: <按钮ID =“BT1” getVisible =“ButtonVisible” 但我的色带停止显示,如果是畸形XML的。你不能在button标签中使用这个属性吗? – db579
@ db579是否还在工作簿的VBProject中添加了“getVisible”子例程? (有点愚蠢的问题,但只是想确保你没有忽视明显的)另外,我注意到你在Group控件上使用了相同的'getVisible'自定义属性。在我的应用程序中,**我不能在不同类型的控件上使用相同的回调/宏** - 如果您在组控件(“group1”)上使用'getVisible',请尝试使用不同的回调(即使它是重复的代码)在按钮上。让我知道,我可以尝试在今晚晚些时候用一个按钮进行测试。 –
是的,我没有添加相应的宏到项目中,我从组中删除了回调,所以不应该有任何冲突。我确实使用了获取可见回调的选项卡,但是我给这个宏指定了一些不同的东西(我认为getVisible =''位必须被调用才能工作? – db579