TL;DR —
Worksheet_BeforeRightClickist ein Ereignis, das Excel in dem Augenblick auslöst, in dem Sie eine Zelle mit der rechten Maustaste anklicken — bevor das Kontextmenü erscheint. Es reicht IhnenTarget(die Zelle) undCancel. Setzen SieCancel = True, und Excels eingebautes Rechtsklick-Menü wird unterdrückt, sodass Sie Ihr Menü — oder eine direkte Aktion — an seine Stelle setzen können. Die Falle, in die fast jeder tappt, ist die Eingrenzung: Ein bedingungslosesCancel = Truedeaktiviert Kopieren, Einfügen und Zellen einfügen für das ganze Blatt, also sichern Sie es mitIntersectab. Und wissen Sie das von vornherein — den Rechtsklick zu deaktivieren ist eine UX-Entscheidung, keine Sicherheitsentscheidung.
' Liegt im Modul des Blatts (Doppelklick auf Sheet1 unter Microsoft Excel Objekte).
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
' Nur Rechtsklicks innerhalb der Spalte Status kapern; den Rest des Blatts in Ruhe lassen.
If Intersect(Target, Me.Range("C2:C100")) Is Nothing Then Exit Sub
Cancel = True ' <-- das eingebaute Kontextmenü unterdrücken
Target.Value = Date ' Rechtsklick stempelt stattdessen das heutige Datum
End Sub
Die meisten Makros warten auf eine Schaltfläche. Worksheet_BeforeRightClick wartet auf
eine Geste — einen Rechtsklick auf eine Zelle — und es läuft bevor Excel das tut,
was ein Rechtsklick normalerweise bewirkt: das Kontextmenü anzeigen. Dieses „bevor“ ist
die Gelegenheit, die Sie brauchen. Sie können das Standardmenü unterdrücken und Ihr eigenes
an seine Stelle setzen, einen Rechtsklick in einen Befehl aus einer einzigen Geste
verwandeln oder ein paar eigene Einträge zu dem hinzufügen, was Excel bereits anbietet. Es
ist auch das Ereignis, zu dem die Leute greifen, um ein Blatt „abzuriegeln“ — und genau
dort liegt die wichtigste Lektion.
Was Sie lernen
- Das mentale Modell — ein Rechtsklick ist die Anforderung eines Menüs, und Sie dürfen sie beantworten
- Die wichtigste Regel —
Cancel = Trueist das, was das eingebaute Menü tatsächlich unterdrückt - Warum das Eingrenzen mit
Intersectnicht optional ist — die nicht eingegrenzte Variante legt das Blatt lahm - Die Ermessensfrage — den Rechtsklick zu deaktivieren ist UX, niemals Schutz
- Blattebene gegenüber Arbeitsmappenebene — und wo der Code liegen muss
Das mentale Modell: eine Anforderung eines Menüs, die Sie beantworten dürfen
Ein Rechtsklick bedeutet für Excel bereits etwas: „zeig mir das Kontextmenü für diese
Zelle.“ Wenn Sie Worksheet_BeforeRightClick schreiben, ruft Excel zuerst Ihren Code auf
und wartet — das Menü ist noch nicht erschienen. Sie erhalten Target, die mit der rechten
Maustaste angeklickte Zelle, und Cancel, einen Boolean, der per Referenz übergeben
wird. Lassen Sie Cancel unangetastet, zeigt Excel nach dem Lauf Ihres Codes sein normales
Menü. Setzen Sie Cancel = True, tut es das nicht — Sie haben die Anforderung selbst
beantwortet, und nun bedeutet der Rechtsklick, was auch immer Ihr Handler daraus gemacht
hat.
Das deutet das Ereignis um. Es heißt nicht „benachrichtige mich beim Rechtsklick.“ Es heißt
„lass mich entscheiden, was ein Rechtsklick hier anbietet.“ Sie können eine Aktion direkt
ausführen (ein Datum stempeln, eine Zeile markieren, ein Detailformular öffnen) oder Ihr
eigenes, mit CommandBars gebautes Menü aufklappen lassen. So oder so verschwindet das
eingebaute Menü nur, wenn Sie es sagen, mit Cancel = True. Und wie jedes Ereignis dieser
Familie liegt dieses im eigenen Codemodul des Arbeitsblatts — nicht in einem
gewöhnlichen Module und nicht in ThisWorkbook.
Die wichtigste Regel: Cancel = True unterdrückt das eingebaute Menü
Hier ist der Fehler. Sie wollen, dass ein Rechtsklick Ihren eigenen Befehl ausführt, also schreiben Sie die Aktion und hören auf:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Target.Value = Date ' stempelt das Datum ... und Excels Menü klappt trotzdem auf
End Sub
Das Datum landet — und dann erscheint trotzdem das vollständige Kontextmenü, weil nichts
Cancel gesetzt hat. Der Benutzer hat nun sowohl Ihre Aktion als auch Excels Menü mit
Ausschneiden/Kopieren/Einfügen obendrauf. Die Regel: Cancel = True ist die Zeile, die
das Menü ersetzt. Setzen Sie sie immer dann, wenn Ihr Handler die Antwort auf den
Rechtsklick sein soll:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True ' das eingebaute Menü erscheint nie
Target.Value = Date ' Ihr Befehl ist die gesamte Interaktion
End Sub
Wollen Sie stattdessen einen Eintrag hinzufügen, statt das Menü zu ersetzen, lassen Sie
Cancel unangetastet und fügen Ihr Steuerelement zu Application.CommandBars("Cell")
hinzu — Excel zeigt sein Menü mit Ihrem zusätzlichen Eintrag darauf. Unterdrücken (mit
Cancel = True), wenn Sie ersetzen; die Cell-CommandBar erweitern, wenn Sie hinzufügen.
Die Regel, die das Blatt benutzbar hält: grenzen Sie es mit Intersect ein
Dieses Ereignis bestraft einen nicht eingegrenzten Handler härter als jedes andere. Läuft
Ihr Code bei jedem Rechtsklick und setzt Cancel = True, haben Sie das gesamte
Rechtsklick-Menü aus dem ganzen Blatt entfernt — kein Kopieren, kein Einfügen, kein Zellen
einfügen, kein Filter, kein Zellen formatieren, nirgends. Sie haben das Blatt nicht
angepasst; Sie haben es kaputtgemacht.
Grenzen Sie auf die Zellen ein, die ein eigenes Verhalten haben sollen, und lassen Sie jede andere Zelle ihr normales Menü behalten:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
' Eigenes Verhalten nur in der Spalte Status; überall sonst das normale Menü.
If Intersect(Target, Me.Range("C2:C100")) Is Nothing Then Exit Sub
Cancel = True
Target.Value = Date
End Sub
Intersect(Target, Me.Range("C2:C100")) liefert Nothing außerhalb Ihres Zielbereichs,
sodass Exit Sub die Kontrolle an Excel zurückgibt und das eingebaute Menü wie gewohnt
erscheint. Das ist derselbe Intersect-Wächter, der einen
Worksheet_Change-Handler zielgerichtet hält — hier ist er
der Unterschied zwischen einem hilfreichen Blatt und einem unbrauchbaren.
Die Ermessensfrage: den Rechtsklick zu deaktivieren ist UX, keine Sicherheit
Die Leute finden dieses Ereignis, indem sie nach „wie deaktiviere ich den Rechtsklick, um
mein Blatt zu schützen“ suchen. Sagen wir es also unverblümt: Eine Rechtsklick-Sperre per
Cancel = True schützt nichts. Sie stoppt nur einen einzigen Eingabeweg — das Mausmenü.
Alles andere funktioniert weiterhin: Ctrl+C und Ctrl+V, das Menüband, das Namenfeld,
ein anderes Makro und — das Argument, das die Debatte beendet — das Öffnen der Datei mit
deaktivierten Makros, was Ihr gesamtes Ereignis abschaltet. Ist ein entschlossener Benutzer
oder ein böswilliger Akteur Ihr Bedrohungsmodell, rührt BeforeRightClick daran nicht.
Wofür das Ereignis wirklich taugt, ist das Gestalten der Interaktion: ein Menü ausblenden, das in einem Eingabebereich irrelevant ist, es durch zwei Befehle ersetzen, die tatsächlich zur Aufgabe passen, oder einen Wert mit einer Geste stempeln. Setzen Sie es ein, um das Richtige leicht zu machen, nicht um das Falsche unmöglich zu machen. Brauchen Sie echten Schutz, dann sind das Blattschutz, Schutz der Arbeitsmappenstruktur und das Nicht-Vertrauen auf ein clientseitiges Ereignis — ein völlig anderes Werkzeug.
Die Unterscheidung, die über den Ort des Codes entscheidet: Blatt gegenüber Arbeitsmappe
Worksheet_BeforeRightClick ist ein Ereignis je Blatt — es liegt im Modul eines
einzelnen Arbeitsblatts und feuert nur auf diesem Blatt. Um dasselbe Verhalten überall
anzuwenden, nutzen Sie den Zwilling auf Arbeitsmappenebene, Workbook_SheetBeforeRightClick
in ThisWorkbook, der ein erstes Argument hinzufügt, Sh, für das betroffene Blatt:
' In ThisWorkbook - feuert für einen Rechtsklick auf JEDEM Blatt.
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Sh.Name <> "Log" Then Exit Sub
If Intersect(Target, Sh.Range("C2:C100")) Is Nothing Then Exit Sub
Cancel = True
Target.Value = Date
End Sub
Dieselbe Wahl, die Sie bei
Worksheet_Activate gegenüber Workbook_SheetActivate
treffen: ein bestimmtes Blatt → das Modul des Blatts; irgendein Blatt → das
Arbeitsmappenmodul mit dem Argument Sh. Und es passt von Natur aus zu seinem
Gesten-Geschwister
Worksheet_BeforeDoubleClick, das einen
Doppelklick mit derselben Form aus Target plus Cancel abfängt.
Wie ExcelMaster hilft
Ein Rechtsklick-Handler besteht aus drei Entscheidungen, die man leicht falsch trifft: der
Intersect-Wächter, der Kopieren und Einfügen außerhalb Ihres Zielbereichs am Leben hält,
das Cancel = True, das das Menü tatsächlich unterdrückt, und das ehrliche Urteil darüber,
was eine Sperre schützt und was nicht.
ExcelMaster
lässt Sie stattdessen das Verhalten beschreiben. Sagen Sie „ein Rechtsklick auf eine Zelle
in der Spalte Status soll das heutige Datum stempeln und nicht das normale Menü zeigen, den
Rest des Blatts aber in Ruhe lassen“, und es schreibt ein Worksheet_BeforeRightClick im
richtigen Modul, grenzt es mit Intersect ein und setzt Cancel. Die Arbeitsmappe und der
Code bleiben Ihnen; Sie überspringen das Ausprobieren — und man sagt Ihnen ehrlich, was es
schützt, statt es Ihnen anzudrehen.
Häufig gestellte Fragen
Wie führe ich in Excel ein Makro beim Rechtsklick aus?
Legen Sie eine Worksheet_BeforeRightClick-Prozedur in das Codemodul des Blatts:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean). Excel
ruft sie auf, wenn eine Zelle auf diesem Blatt mit der rechten Maustaste angeklickt wird,
und übergibt Target. Fügen Sie Ihre Aktion hinzu und setzen Sie Cancel = True, wenn Sie
das eingebaute Menü ersetzen wollen.
Wie deaktiviere ich das Rechtsklick-Menü in VBA?
Setzen Sie Cancel = True innerhalb von Worksheet_BeforeRightClick. Das unterdrückt das
Kontextmenü. Grenzen Sie es mit Intersect ein, es sei denn, Sie wollen es wirklich auf
dem ganzen Blatt loswerden — eine bedingungslose Sperre entfernt überall Kopieren, Einfügen
und Zellen einfügen. Beachten Sie, dass es nur das Mausmenü blockiert; es ist keine
Sicherheitsmaßnahme.
Schützt das Deaktivieren des Rechtsklicks meine Daten?
Nein. Es entfernt nur einen einzigen Eingabeweg. Ctrl+C/Ctrl+V, das Menüband, andere
Makros und das Öffnen der Datei mit deaktivierten Makros umgehen es allesamt. Nutzen Sie
BeforeRightClick, um die Interaktion zu straffen, und nutzen Sie Blatt-/
Arbeitsmappenschutz für echten Schutz.
Wie füge ich dem Rechtsklick-Menü einen eigenen Eintrag hinzu, statt es zu ersetzen?
Lassen Sie Cancel ungesetzt und fügen Sie ein Steuerelement zu
Application.CommandBars("Cell") hinzu — Excel zeigt sein normales Menü mit Ihrem
zusätzlichen Eintrag. Setzen Sie Cancel = True nur, wenn Sie das Menü ersetzen statt
erweitern wollen.
Wohin gehört Worksheet_BeforeRightClick-Code?
In das Codemodul des betreffenden Arbeitsblatts — doppelklicken Sie im Projekt-Explorer
unter „Microsoft Excel Objekte“ auf das Blatt. Für einen Rechtsklick auf irgendeinem Blatt
nutzen Sie stattdessen Workbook_SheetBeforeRightClick in ThisWorkbook. Aus einem
gewöhnlichen Module feuert es nicht, und Makros müssen aktiviert sein.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 06.08.2026.
Verwandte Anleitungen: VBA Worksheet_BeforeDoubleClick · VBA Workbook_BeforePrint · VBA Worksheet_Change · VBA Worksheet_Activate & Deactivate · VBA Range
