FAQ 0135: CommandBar in Excel erstellen oder erweitern
von Philipp Serrer
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
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.