Habs mir nochmal überlegt: In dieser Version kannst Du die Werte in mehreren Zeilen gleichzeitig ändern:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim trgZeile As Long
Dim lngLaufZahl As Long
Dim Zelle As Excel.Range
'Die Spalte E wird für die Hilfswerte 0 oder 1 benutzt
'Änderungen die nicht in Spalte E und Zeile 1 stattfinden werden nicht bearbeitet
If Target.Column <> 5 Then Exit Sub
If Target.Row = 1 Then Exit Sub
On Error GoTo Fehler
'Ereignisse abschalten
Application.EnableEvents = False
Application.ScreenUpdating = False
'Falls Target ein Array ist
For Each Zelle In Target
If Zelle.Offset(0, -4) = "" Then Exit Sub
With ThisWorkbook
'Es gibt nur zwei Blätter: Blatt 1 ist Quellbereich, Blatt 2 ist Zielbereich.
'Blattname wird nicht verwendet
With .Sheets(2)
.Activate
If Zelle = 1 Then
'Erste freie Zeile
trgZeile = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row + 1
Zelle.EntireRow.Columns("A:D").Copy
.Cells(trgZeile, 1).Select
Selection.PasteSpecial xlValues
.Cells(trgZeile, 1).Select
ElseIf Zelle = 0 Then
'Letzte beschriebene Zeile
trgZeile = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
'Es wird angenommen, daß in der ersten Zeile Überschriften stehen.
For lngLaufZahl = 2 To trgZeile
If .Cells(lngLaufZahl, 1) = Zelle.Offset(0, -4) Then
.Cells(lngLaufZahl, 1).EntireRow.Delete
Exit For
End If
Next lngLaufZahl
Else
'Bei falscher Eingabe wird der Wert auf 0 gesetzt.
Application.EnableEvents = True: DoEvents
Zelle = 0
Exit Sub
End If
End With
.Sheets(1).Activate
End With
Next
'Escape-Taste drücken
Application.SendKeys "{ESC}"
'Ereignisse einschalten
Application.EnableEvents = True
Application.ScreenUpdating = True
Exit Sub
Fehler:
Err.Clear
MsgBox "Ein Fehler ist aufgetreten!" & Chr(10) _
& "Das Programm wird abgebrochen!", vbCritical, "Fehler..."
End Sub
Severus
|