Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

BeforeRightClick Zeilen einfügen/löschen geht nicht

Forumthread: BeforeRightClick Zeilen einfügen/löschen geht nicht

BeforeRightClick Zeilen einfügen/löschen geht nicht
13.02.2026 10:43:29
W5
Hallo liebe Herber-Community,

ich möchte in einer Anwendung über das Kontextmenü gewisse Funktionen zur Verfügung stellen. Leider passiert bei .rows(123).insert und .rows(123).delete nichts, wenn ich den gleichen Code aber über den Doppelklick-Event starte funktioniert er.
Es macht keinen Unterschied, ob ich das echte Kontextmenü um eigene Punkte erweitere (wie in der Testdatei) oder ein Fake-Kontextmenü kreiere.
Weder die Testdatei noch meine 'richtige' Datei haben derzeit einen Blattschutz, der blockieren könnte.
Wie kann ich Excel glauben lassen, nicht mehr in einem Kontextmenü zu sein (andererseits sollte das egal sein, bei doubleclick kommt das true = false auch erst nachdem die Aktion durchgeführt ist...)

Was übersehe ich?

hier meine exemplarischen trigger-Events (Teil in Tabelle1)
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Dim icbc As Object
For Each icbc In Application.CommandBars("cell").Controls
If icbc.Tag = "brccm" Then icbc.Delete
Next icbc
If Not Application.Intersect(Target, Range("a1:BB2064")) Is Nothing Then
With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, before:=6, Temporary:=True)
.Caption = "ZEILE LÖSCHEN"
.OnAction = "kontextmakro(3, " & Target.Row & ")"
.Tag = "brccm"
End With
With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, before:=6, Temporary:=True)
.Caption = "ZEILE BEREINIGEN"
.OnAction = "kontextmakro(2, " & Target.Row & ")"
.Tag = "brccm"
End With
With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, before:=6, Temporary:=True)
.Caption = "NEUE ZEILE"
.OnAction = "kontextmakro(1, " & Target.Row & ")"
.Tag = "brccm"
End With
With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, before:=6, Temporary:=True)
.Caption = "ARTIKEL ERSETZEN"
.OnAction = "kontextmakro(4, " & Target.Row & ")"
.Tag = "brccm"
End With
With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, before:=6, Temporary:=True)
.Caption = "ARTIKEL ÄNDERN"
.OnAction = "kontextmakro(5, " & Target.Row & ")"
.Tag = "brccm"
End With
With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, before:=6, Temporary:=True)
.Caption = "ARTIKEL EINFÜGEN"
.OnAction = "kontextmakro(6, " & Target.Row & ")"
.Tag = "brccm"
End With

End If


End Sub


Private Sub Worksheet_BeforedoubleClick(ByVal Target As Range, Cancel As Boolean)


If Target.Row = 1 Then
Call doppelklickmakro(Target.Row, Target.Row)
ElseIf Target.Row = 2 Then
Call doppelklickmakro(Target.Row, Target.Row)
ElseIf Target.Row = 3 Then
Call doppelklickmakro(Target.Row, Target.Row)
ElseIf Target.Row = 4 Then
Call doppelklickmakro(Target.Row, Target.Row)
ElseIf Target.Row = 5 Then
Call doppelklickmakro(Target.Row, Target.Row)
ElseIf Target.Row = 6 Then
Call doppelklickmakro(Target.Row, Target.Row)
End If

Cancel = True

End Sub


hier die dazugehörigen Makros (Teil in Makro1)

Sub kontextmakro(typ As Integer, wohin As Integer)


MsgBox "kontext"
art = typ
reihe = wohin

If art = 1 Or art = 2 Or art = 3 Then
Rows(reihe + 1).Insert
ElseIf art = 6 Then
ActiveCell.Value = 10
ElseIf art = 4 Or art = 5 Then
Rows(reihe).Delete
End If
End Sub

Sub doppelklickmakro(typ As Integer, wohin As Integer)

MsgBox "doppel"

art = typ
reihe = wohin

If art = 1 Or art = 2 Or art = 3 Then
Rows(reihe + 1).Insert
ElseIf art = 6 Then
ActiveCell.Value = 10
ElseIf art = 4 Or art = 5 Then
Rows(reihe).Delete
End If



Hintergrund:
User soll Zeile löschen können wenn sie noch nicht verwendet wurde (Doppelklick funktioniert, Kontextmenü funktioniert nicht)
User soll Zeile darunter einfügen können wenn er im Artikelbereich ist (Doppelklick funktioniert, Kontextmenü funktioniert nicht)
User soll Zeile mit Werten aus der Datenbank befüllen können (Doppelklick funktioniert, Kontextmenü funktioniert bedingt)
User soll Zeile bereinigen könne wenn sie noch nicht verwendet wurde (Kontextmenü FUNKTIONIERT!)

Beispieldatei: https://www.herber.de/bbs/user/180274.xlsm


vielen lieben Dank für Ideen und Input!

LG
W5
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BeforeRightClick Zeilen einfügen/löschen geht nicht
13.02.2026 13:57:53
snb
Reicht schon:

Private Sub Worksheet_BeforedoubleClick(ByVal Target As Range, Cancel As Boolean)

Select Case ActiveCell.Row
Case 1, 2, 3
Rows(ActiveCell.Row).Insert
Case 4, 5
ActiveCell.EntireRow.Delete
Case 6
ActiveCell.Value = 10
End Select

Cancel = True
End Sub

Anzeige
AW: BeforeRightClick Zeilen einfügen/löschen geht nicht
13.02.2026 14:09:55
GerdL
Moin,

ein Beispielcode.

Option Explicit

'Modul der Tabelle
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 2 Then 'Spalte B
Cancel = True
Call Test1
End If
End Sub

'Modul1
Option Explicit

Sub Unit()
With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton, before:=6, Temporary:=True)
.Caption = "ZEILE LÖSCHEN"
.OnAction = "Test1"
.Tag = "hallo"
End With
End Sub

Sub Test1()
ActiveCell.EntireRow.Delete
End Sub

Gruß Gerd
Anzeige
AW: BeforeRightClick Zeilen einfügen/löschen geht nicht
13.02.2026 16:37:32
W5
Danke GerdL für deine Antwort, diese löst jedoch mein Problem noch nicht.

Ich möchte den User über das Kontextmenü eines von mehreren von mir erstellten Makro in einem von mir gesetzten Bereich auswählen und auslösen lassen --> funktioniert in Beispieldatei
Das gewählte Makro wird gewählt --> funktioniert in Beispieldatei
Das gewählte Makro wird ausgeführt --> funktioniert NICHT bei .insert und .delete

In deiner Lösung würde stets bei Klick auf Zeile 2 zuerst das Kontextmenü unterdrückt werden und dann .delete aufgerufen werden.

Der User soll jedoch sowohl in der Wahl der Zeilen vergleichsweise frei sein (das erweiterte Menü steht dann in Range A60:BN1000 zur Verfügung).
Da soll der User die Möglichkeit haben, aus mehreren erstellten Funktionen innerhalb meines Bereichs wählen zu können.
Die durch den Blattschutz nicht gesperrten Standardfunktionen (Werte einfügen und dieser Kram...) sollen parallel dazu ebenfalls zur Verfügung stehen.

Ein eigenes erstelltes Menü habe ich ebenfalls bereits versucht, mit dem selben Ergebnis, dass .insert und .delete nicht ausgeführt werden.


Danke auch an snb - deine Antwort beschäftigt sich leider nicht mit dem Kern meiner Frage sondern finalisiert mein Vergleichsmakro für den Doppelklick. Vielleicht hilft die Antwort trotzdem mal jemandem!


Gibt es noch Ideen dazu?

Danke und LG
W5
Anzeige
AW: BeforeRightClick Zeilen einfügen/löschen geht nicht
13.02.2026 18:23:20
schauan
1)
es ist eigentlich unnötig, das Kontextmenü bei jedem Rechtsklick zu erneuern. Mach das nur, wenn Du im betreffenden Bereich bist und es nicht da ist.
2)
Wenn Du in die MsgBox noch die Parameter nimmst, siehst Du, dass diese zwar übergeben werden, aber eben nichts passiert. Wenn Du bei der MsgBox einen Haltepunkt setzt, scheint da ggf. seltsamerweise nix zu halten, als ob das Makro nicht durchlaufen wird Wird es aber schon irgendwie, denn die MsgBox kommt ja ... Siehe auch der Hinweis von xlKing.

Man könnte sich auch so behelfen:
- Schreibe für jeden Eintrag ein kurzes Makro mit den Parametern, z.B.
Sub kontextmakro_1()

MsgBox "kontext_1"
rechtsklickmakro 1, ActiveCell.Row
End Sub
Sub kontextmakro_2()
MsgBox "kontext_2"
rechtsklickmakro 2, ActiveCell.Row
End Sub


Da siehst Du auch, dass Du Target.Row nicht aus dem Kontextmenü übergeben musst. Andere Makros kennen die aktive Zelle schon ;-) Interessant wird es nur bei Markierung mehrerer Zellen. Wenn Du z.B. in A6 beginnst und bis A1 markierst, ist ActiveCell.Row = 6, aber Target.Row = 1
Anzeige
AW: BeforeRightClick Zeilen einfügen/löschen geht nicht
13.02.2026 18:12:15
xlKing
Hallo,

erstens bist du wohl mit der Nummerierung durcheinander gekommen. mit "Zeile löschen" rufst du das Kontextmakro 3 auf. Den Nummern 1,2 und 3 hast du aber ein .Insert hinterlegt. Das löschen erfolgt erst bei 4 und 5.

zweitens (und das ist wahrscheinlich wichtiger) hast du die OnAction falsch gesetzt. Aus irgendeinem Grund, funktioniert es teilweise trotzdem aber bestimmte Funktionen eben nicht. Schreibe die Zuweisung zu OnAction so: .OnAction = "'kontextmakro 3, " & Target.Row & "'" Dann klappts auch mit dem Zeile einfügen bzw. Löschen.

Gruß Mr. K.
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige