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

Löschen von Zeilen oder Kolonnen selektiv unterdrücken

Forumthread: Löschen von Zeilen oder Kolonnen selektiv unterdrücken

Löschen von Zeilen oder Kolonnen selektiv unterdrücken
01.07.2025 15:11:36
Jürgen19
Hallo allerseits

gibt es eine Möglickeit, das Löschen von angewählten Zeilen oder Kolonnen per VBA basierend auf Kriterien zu unterdrücken?

z.B. Benutzer klickt Zeile x mit rechtem Mausklick an und wählt "Zeile löschen". Je nach wechselnden Kriterien soll das Löschen unterbunden oder erlaubt werden.

Gruss
Jürgen
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Löschen von Zeilen oder Kolonnen selektiv unterdrücken
01.07.2025 16:59:51
daniel
Hi
ins Menü eingreifen ist schwierig
du kannst im Prinzip folgendes machen.
einfacher ist, zu prüfen ob gelöscht wurde und dann dieses rückgängig zu machen.
Wenn man im SelectionChange den selektierten Bereich einer Variablen zuweist und dann diesen Bereich löscht, dann hat diese Variable den Typ 9, sonst hat sie andere Typen. das kann man ausnutzen.

probier mal diesen Code im Modul des Tabellenblatts:
Option Explicit


Dim Auswahl
Dim LöschenVerboten As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
If VarType(Auswahl) = 9 And LöschenVerboten Then
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Auswahl = Target
LöschenVerboten = True
End Sub



das LöschenVerboten musst du natürlich im SelectionChange dann immer entsprechend deinen Kriterien auf TRUE oder FALSE setzen.

Gruß Daniel

Anzeige
AW: Löschen von Zeilen oder Kolonnen selektiv unterdrücken
01.07.2025 18:34:19
daniel
Hi
ich hätte da noch einen anderen Ansatz.
über das "Blatt schützen" kannst du gezielt das Löschen von Zeilen und Spalten verbieten:
Userbild

setze in dein Eigenschaften alle Zellen auf "nicht gesperrt"

im SelectionChange-Event aktivierst du dann den Blattschutz mit den o.g. Einstellungen (kannst du mit dem Recorder aufzeichnen) wenn die Bedingungen zutreffen und wenn nicht, hebst du den Blattschutz auf.

Gruß Daniel
Anzeige
AW: Löschen von Zeilen oder Kolonnen selektiv unterdrücken
07.07.2025 12:17:21
Jürgen19
Hallo

so, nun habe ich die beiden Möglichkeiten ausprobiert. Die Variante "Blattschutz" gefällt mir nicht so sehr. Hier bekommt der Benützer eine standard Meldung, die nicht das aussagt, was sie sollte.

Variante "Undo" sieht so aus:



Option Explicit

Dim Auswahl
Dim gewaehlte_zeilen As String
Dim LöschenVerboten As Boolean


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
' Prozedur prüft, ob Blatt geschützt oder Benutzer IT-Guru ist. Falls Ja geschieht nichts.
'
' Falls Nein, wird geprüft ob eine oder mehrere Zeilen angewählt sind. Falls Ja
' werden die Parameter für das Löschverbot gesetzt
'
' Format von Target bei
' Zeile(n) ="$xxx:$yyy"
' Kolonne(n) = "$a:$b"
' Bereich ="$a$xxx" oder "$a$xxx:$b$yyy"
'
' mit xxx,yyy = Zeilennunmmer
' a,b = Kolonnenbuchstabe(n)
'
If ActiveSheet.ProtectContents = True Or _
Worksheets("Berechtigte").Range("rg_aktiver_function") = "IT-Guru" Then Exit Sub
'
gewaehlte_zeilen = Target.Address
LöschenVerboten = False
'
' prüfen ob Zeile(n) angewählt, zweites Zeichen muss numerisch sein
'
If IsNumeric(Mid(gewaehlte_zeilen, 2, 1)) Then
If InStr(1, gewaehlte_zeilen, ":", vbTextCompare) > 0 Then
Set Auswahl = Target
LöschenVerboten = True
End If ' InStr(1, gewaehlte_zeilen, ":", vbTextCompare) > 0
End If ' IsNumeric(Mid(gewaehlte_zeilen, 2, 1))
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim answ As Long
Dim msg_text As String
'
' Eine Änderung wurde vorgenommen.
' Falls es sich um eine Löschung handelt und LöschenVerboten = True wird die Löschung
' rückgängig gemacht
'
' VarType(Auswahl) = vbObject wenn Zeile(n) gelöscht wurden
' VarType(Auswahl) = vbVariant + vbArray) wenn ein Bereich gelöscht wurde
'
If (VarType(Auswahl) = vbObject Or VarType(Auswahl) = vbVariant + vbArray) And LöschenVerboten Then
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With ' Application
'
' Meldung an Benutzer geben
'
If VarType(Auswahl) = vbObject Then
msg_text = " Sie dürfen nicht gelöscht werden!"
Else ' VarType(Auswahl) = vbObject
msg_text = " Der Inhalt darf nicht gelöscht werden!"
End If ' VarType(Auswahl) = vbObject

answ = MsgBox("Die Zeile(n) " & gewaehlte_zeilen & " wurden angewählt." & msg_text & vbLf & vbLf & _
"Die Löschung wurde rückgängig gemacht!" & vbLf & vbLf & _
"Falls eine Löschung notwendig ist, bitte an IT melden!", _
vbOKOnly + vbExclamation, "Löschen von Zeilen")

End If ' (VarType(Auswahl) = vbObject Or VarType(Auswahl) = vbVariant + vbArray) And LöschenVerboten
'
End Sub
'


Danke Daniel für die Tips

Jürgen
Anzeige
AW: Löschen von Zeilen oder Kolonnen selektiv unterdrücken
01.07.2025 17:58:36
Jürgen19
Hallo Daniel

ein viel versprechender Ansatz. So auf die Schnell perfekt. Nun muss ich nur noch das Zugemüse beistellen, das ist eine kleine Fleissarbeit, wird aber gehen.

Danke!

Jürgen

Forumthreads zu verwandten Themen

Anzeige