BeforeRightClick Zeilen einfügen/löschen geht nicht
13.02.2026 10:43:29
W5
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