Die Community zu .NET und Classic VB.
Menü

FAQ 0135: CommandBar in Excel erstellen oder erweitern

 von 

Frage 

Ich möchte in Excel eine eigene CommandBar oder ein eigenes Menü erstellen. Wie geht das?

Beispiel  

Excel verfügt über die sogenannte CommandBars-Auflistung. Mit dieser Auflistung kann man auf alle bestehenden CommandBar-Objekte zugreifen, sie ändern oder eine neue CommandBar hinzufügen.
Die einzelnen Unterpunkte sind im Controls-Objekt der CommandBar. Wenn man auf Ereignisse reagieren will, muss man die onAction Eigenschaft verwenden. Sie enthält den Namen der Funktion, die bei einem Klick aufgerufen werden soll.

Folgendes Beispiel stammt von Alexander Fross:

Option Explicit
    
Sub CustomButton_Add(cBar As CommandBar)
    Dim cmdB        As CommandBarButton
    Dim cProtect    As MsoBarProtection
    
    '   Ermitteln ob cmdBarButton bereits existiert.
    Set cmdB = cBar.FindControl(msoControlButton, , "myCmdButton")
    
    '   Falls cmdBarButton noch nicht existiert neu erstellen.
    If cmdB Is Nothing Then
        '   Allfälligen Schutz speichern und aufheben.
        cProtect = cBar.Protection
        cBar.Protection = msoBarNoProtection

        '   Den cmdBarButton "immer" temporär erstellen.
        Set cmdB = cBar.Controls.Add(msoControlButton, , , , True)

        '   Eigenschaften des cmdBarButton definieren
        With cmdB
            .BeginGroup = False
            .Caption = "  &Mein Eigener Button"
            .FaceId = 2950
            .Height = 30
            .OnAction = "cmdB_Function"
            .ShortcutText = "F12"
            .Style = msoButtonIconAndCaption
            .Tag = "myCmdButton"
            .TooltipText = "Das ist mein eigener Button!"
            .Width = 150
        End With
        
        '   cmdBarButton in Kontextmenü der Tabelle kopieren.
        Set cmdB = cmdB.Copy(Application.CommandBars("Cell"))
        cmdB.Caption = "Mein Eigener Button"
        
        '   Zuweisung eines Tastenbefehls, in diesem Beispiel F12.
        Application.OnKey "{F12}", "cmdB_Function"
        
        '   Schutz zurücksetzen
        cBar.Protection = cProtect
    End If
End Sub

Sub CustomButton_Del(cBar As CommandBar)
    Dim cmdB        As CommandBarButton
    Dim cProtect    As MsoBarProtection
    
    '   Allfälligen Schutz speichern und aufheben.
    cProtect = cBar.Protection
    cBar.Protection = msoBarNoProtection
    
    '   Den erstellten cmdBarButton suchen und löschen.
    Set cmdB = cBar.FindControl(msoControlButton, , "myCmdButton")
    If Not cmdB Is Nothing Then cmdB.Delete
    
    cBar.Protection = cProtect
   
    '   Tastenkombination und Kontextmenü wieder zurücksetzen.
    Application.CommandBars("Cell").Reset
    Application.OnKey "{F12}"
End Sub

Private Sub cmdB_Function()
    MsgBox "Funktion ist noch nicht implementiert!", _
            vbCritical Or vbOKOnly, "Fehler"
    
   '    Falls mit der Sub, die dem cmdBarButton zugewiesen wurde, ein
   '    anderes Workbook geöffnet, erstellt oder aktiviert wird - kurz
   '    gesagt: sobald mit dieser Sub das Deactivate-Ereignis dieser
   '    Tabelle ausgelöst wird - muss die Sub mittels OnTime aufgerufen
   '    werden, da sonst ein Laufzeitfehler verursacht wird. Hier ein
   '    Beispiel:
   'Application.OnTime Now + TimeValue("00:00:01"), "cmdB_FunctionOnTime"
End Sub

Private Sub cmdB_FunctionOnTime()
    '   Diese Sub wird nur in bestimmten Fällen benötigt.
    '   Siehe Sub "cmdB_Function"
    MsgBox "Funktion ist noch nicht implementiert!", _
            vbCritical Or vbOKOnly, "Fehler"
End Sub

Listing 1: Toolbar erstellen

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.