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!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage