Worksheet Change Makro reagiert nicht
16.03.2026 12:49:02
Christian
habe bereits zig mal Chatgp gefragt, aber C. bietet mir keine Änderung, die das Problem löst.
Folgendes passiert, ich kopiere eine Zeile aus dem Blatt "Codes" in das Blatt "NV".
Das Makro soll automatisch starten beim Einfügen in NV
Das Makro soll prüfen, ob es sich bei der kopierten Zeile um die erste Zeile in Codes handelt, in der Spalte D leer ist, wenn nein Abbruch.
Wenn ja soll es NV!L:M nach NV!E:F verschieben (nur die Eingabezeile) und die kopierte Zeile in Codes löschen.
Was läuft da falsch?
Das ist der C. Versuch, aber er startet erst gar nicht, wenn ich eine Zeile in NV einfüge. Ich markiere z.b. die komplette Zeile Codes!433, drücke Strg+C, markiere dann NV!A34 und drücke Strg+V, in dem Moment soll das Makro starten.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wsNV As Worksheet
Dim wsCodes As Worksheet
Dim copiedRow As Long
Dim firstEmptyD As Long
Set wsNV = Me
Set wsCodes = ThisWorkbook.Sheets("Codes")
' Prüfen, ob nur eine Zeile eingefügt/ändere wurde
If Target.Rows.Count > 1 Then Exit Sub
' Prüfen, ob die Änderung in NV!A:F ist (oder gesamte Zeile?)
' Wir nehmen an, die ganze Zeile wurde eingefügt
copiedRow = Target.Row
' Finde die erste Zeile in Codes, bei der Spalte D leer ist
firstEmptyD = 0
Dim i As Long
For i = 1 To wsCodes.Cells(wsCodes.Rows.Count, "D").End(xlUp).Row
If wsCodes.Cells(i, "D").Value = "" Then
firstEmptyD = i
Exit For
End If
Next i
' Wenn keine passende Zeile gefunden, Abbruch
If firstEmptyD = 0 Then Exit Sub
' Prüfen, ob die eingefügte Zeile die erste leere D-Zeile aus Codes ist
' Optional: Wenn du die ganze Zeile aus Codes eingefügt hast, könnte man prüfen:
' Vergleich bestimmter Spalten, z.B. A:C
' Wir gehen hier davon aus, dass der Nutzer die Zeile aus Codes kopiert
' und dass sie mit der ersten leeren D-Zeile übereinstimmt
' Werte von L:M nach E:F verschieben (nur die eingefügte Zeile in NV)
wsNV.Cells(copiedRow, "E").Value = wsNV.Cells(copiedRow, "L").Value
wsNV.Cells(copiedRow, "F").Value = wsNV.Cells(copiedRow, "M").Value
' Optional: L:M leeren, falls gewünscht
wsNV.Cells(copiedRow, "L").ClearContents
wsNV.Cells(copiedRow, "M").ClearContents
' Die kopierte Zeile in Codes löschen
wsCodes.Rows(firstEmptyD).Delete
End Sub
Anzeige