Скрыть отдельные кнопки ленты
У меня есть пользовательская лента 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
В моей конкретной книге, для которой должна загружаться лента, у меня есть скрытый лист, из которого класс модуля моего класса считывает значение для каждой кнопки, чтобы определить, должна ли она отображаться или нет. Прочитав это значение, как я могу скрыть отдельную кнопку? Все примеры, которые я нашел, похоже, работают только для вкладок. Могу ли я передать ленточный интерфейс в класс и пройти через каждый элемент управления? Я не смог найти метод для этого. Спасибо за любую помощь!