Hinzufügen von Elementen zu einem Kontextmenü (Microsoft Excel)
Wenn Sie mit der rechten Maustaste auf eine Zelle klicken, bietet Excel ein funktionsreiches Kontextmenü, in dem Sie eine beliebige Anzahl von Aufgaben ausführen können. Möglicherweise möchten Sie diesem Kontextmenü einige Funktionen hinzufügen, insbesondere wenn es sich um Funktionen handelt, die Sie häufig verwenden.
Leider können Sie Kontextmenüs nicht auf die gleiche Weise bearbeiten wie andere Menüs, indem Sie im Menü Extras die Option Anpassen verwenden. Stattdessen müssen Sie Kontextmenüs über VBA bearbeiten.
Wenn Sie dem Kontextmenü ein Element hinzufügen möchten, das angezeigt wird, wenn Sie mit der rechten Maustaste auf eine Zelle klicken, können Sie den folgenden Code verwenden:
Sub AddItemToContextMenu() Dim cmdNew As CommandBarButton Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Procedure" .OnAction = "MyProcedure" .BeginGroup = True End With End Sub
Sie müssen lediglich die .Caption-Eigenschaft auf den gewünschten Menütext setzen und dann die .OnAction-Eigenschaft so ändern, dass sie auf ein Makro oder einen Befehl verweist, den Sie verwenden möchten. Wenn Sie später die Menüoption entfernen möchten, können Sie das folgende Makro verwenden:
Sub RemoveContextMenuItem() On Error Resume Next CommandBars("cell").Controls("My Procedure").Delete End Sub
Um dies zu verwenden, ändern Sie den Text „Meine Prozedur“ in den Text, den Sie in der .Caption-Eigenschaft des vorherigen Makros verwendet haben. Die On Error-Anweisung wird in diesem Makro nur für den Fall verwendet, dass das angegebene Makroelement zuvor nicht hinzugefügt wurde.
Wenn Sie Ihr Makro nur ein wenig ändern, können Sie festlegen, dass das Hinzufügen zum Kontextmenü nur erfolgen soll, wenn Sie mit der rechten Maustaste auf bestimmte Zellen klicken. Das folgende Makro prüft, ob Sie auf eine Zelle im Bereich von C10 klicken: E25. Wenn dies der Fall ist, wird am Ende des Kontextmenüs eine Menüoption für Ihre Prozedur hinzugefügt.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _ Cancel As Boolean) Dim cmdNew As CommandBarButton For Each icbc In Application.CommandBars("cell").Controls If icbc.Tag = "brccm" Then icbc.Delete Next icbc If Not Application.Intersect(Target, Range("c10:e25")) _ Is Nothing Then Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Procedure" .OnAction = "MyProcedure" .BeginGroup = True .Tag = "brccm" End With End If End Sub
Im VBA-Editor muss dieses Makro dem spezifischen Arbeitsblatt hinzugefügt werden, mit dem es verwendet werden soll. Sie müssen lediglich im Projektexplorer (obere linke Ecke des VBA-Editors) auf dieses Arbeitsblatt doppelklicken und es dann in das Codefenster für dieses Arbeitsblatt eingeben.
Wie beim vorherigen Makro müssen Sie lediglich die Einstellungen ändern, die für die Eigenschaften .Caption und .OnAction angegeben wurden. Darüber hinaus möchten Sie möglicherweise den Zellenbereich ändern, der beim Hinzufügen einer Menüauswahl als „gültig“ gilt. Ändern Sie einfach die Bereichsspezifikation „c: 10: e25“ in den gewünschten Bereich. Sie können sogar einen benannten Bereich anstelle des Zellbereichs verwenden. Dies ist ideal, wenn Ihr gültiger Bereich wirklich aus einer Reihe nicht zusammenhängender Zellen besteht.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (2064) gilt für Microsoft Excel 97, 2000, 2002 und 2003.