Einzelne benutzerdefinierte Multifunktionsleistenschaltflächen ausblenden
Ich habe ein benutzerdefiniertes Excel-Menüband und ein Excel-Add-In, das eine Klasse enthält, die beim Öffnen einer Arbeitsmappe einmal instanziiert wird. Basierend auf einigen Attributen der Klasse müssen bestimmte Schaltflächen des benutzerdefinierten Menübands (alle auf derselben Registerkarte) ausgeblendet werden.
Mein benutzerdefiniertes Band ist:
<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>
Ich habe dann die folgenden VBA-Makros in einem Modul, um das benutzerdefinierte Menüband zu laden und / oder zu deaktivieren:
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
In meiner speziellen Arbeitsmappe, für die das Menüband geladen werden soll, habe ich ein ausgeblendetes Blatt, aus dem meine Klassenmodulklasse einen Wert für jede Schaltfläche liest, um zu bestimmen, ob sie angezeigt werden soll oder nicht. Wenn ich diesen Wert gelesen habe, wie kann ich eine einzelne Schaltfläche ausblenden? Alle Beispiele, die ich gefunden habe, scheinen nur für Registerkarten zu funktionieren. Kann ich die ribbonUI an die Klasse übergeben und die einzelnen Steuerelemente durchlaufen? Ich habe keine Methode dafür gefunden. Danke für jede Hilfe!