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

Worksheet Change Makro reagiert nicht

Forumthread: Worksheet Change Makro reagiert nicht

Worksheet Change Makro reagiert nicht
16.03.2026 12:49:02
Christian
Hallo, ich bitte euch um Hilfe,

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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
BspDatei
16.03.2026 13:04:55
Christian
https://www.herber.de/bbs/user/180409.xlsm

wie gesagt, ich will eine Zeile von Codes nach NV kopieren, das Makro soll prüfen, ob es sich dabei um die erste Zeile in Codes handelt, in der Spalte D leer ist, im Bsp. Zeile 10, wenn nein Abbruch, wenn ja sollen in NV in der Eingabezeile die Texte in L:M nach E:F verschoben werden und die kopierte Zeile im Blatt Codes (im Bsp. Zeile 10) gelösch werden.

Anzeige
Wenn ich dich...
16.03.2026 13:54:15
Case
Moin Christian, :-)

... richtig verstanden habe, dann so: ;-)
https://www.herber.de/bbs/user/180410.xlsm

Du musst nicht die ganze Zeile markieren und nicht kopieren. Nur im Tabellenblatt "Codes" in Spalte A in die Zelle klicken, in der Spalte D die erste Zelle leer ist, sonst passiert nichts. ;-)

Wenn du Ax:Cx nicht übernehmne willst, einfach die eine Codezeile raus. ;-)

Anzeige
AW: Wenn ich dich...
16.03.2026 14:30:42
Christian
Hallo Case,

erstmal vielen Dank
theoretisch ja, praktisch leider unpraktisch. ich will ja auch nach wie vor eine Zelle auswählen können, ohne dass das Makro startet. Kann man das irgendwie ersetzen , z.b. durch einen Doppelklick?

Ansonsten wäre es das was ich brauche.

Christian
Anzeige
Mit...
16.03.2026 14:47:15
Case
Moin Christian, :-)

... Doppleklick so: ;-)
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row = Cells(Rows.Count, "D").End(xlUp).Row + 1 Then
Cancel = True
Tabelle2.Cells(Tabelle2.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 3).Value = Cells(Target.Row, 1).Resize(, 3).Value
Tabelle2.Cells(Tabelle2.Rows.Count, 5).End(xlUp).Offset(1).Resize(, 2).Value = Cells(Target.Row, 12).Resize(, 2).Value
Rows(Target.Row).Delete
End If
End Sub

Servus
Case
Anzeige
Bzw., wenn...
16.03.2026 14:52:41
Case
Moin Christian, :-)

... es nur bei Doppelklick in Spalte A klappen soll, dann so: ;-)
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row = Cells(Rows.Count, "D").End(xlUp).Row + 1 And Target.Column = 1 Then
Cancel = True
Tabelle2.Cells(Tabelle2.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 3).Value = Cells(Target.Row, 1).Resize(, 3).Value
Tabelle2.Cells(Tabelle2.Rows.Count, 5).End(xlUp).Offset(1).Resize(, 2).Value = Cells(Target.Row, 12).Resize(, 2).Value
Rows(Target.Row).Delete
End If
End Sub

Servus
Case
Anzeige
AW: Mit...
16.03.2026 15:21:47
Christian
Hallo Case, das funktioniert soweit,

ich werde mir jetzt noch versuchen eine Abfrage zu bauen, die unterscheidet, ob ich die Zeile mit oder ohne Übertragung nach NV löschen will.
Aber denke dafür reichen meine VBA Kenntnisse aus.

DAnke
Christian
Erweitere die...
16.03.2026 15:35:17
Case
Moin Christian, :-)

... entsprechende Codezeile so: ;-)
If MsgBox("Löschen...", vbYesNo, "Quellzeile löschen?") = vbYes Then Rows(Target.Row).Delete

Servus
Case
Anzeige
AW: Erweitere die...
16.03.2026 15:41:28
Christian
Hallo Case,

mein Weg war zwar etwas umständlicher, hab auch noch mehr zugefügt

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


If Target.Row = Cells(Rows.Count, "D").End(xlUp).Row + 1 Then
Cancel = True

Dim Antwort As VbMsgBoxResult
Dim txt As String
Dim ZielZeile As Long

Antwort = MsgBox("Soll die Zeile nach NV übertragen werden?" & vbCrLf & _
"Ja = Übertragen und löschen" & vbCrLf & _
"Nein = Nur löschen", _
vbYesNoCancel + vbQuestion, "Zeile löschen")

If Antwort = vbYes Then

txt = InputBox("Optionalen Text für NV!D eingeben (kann leer bleiben):", "Text eingeben")

With Tabelle2
ZielZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1

.Cells(ZielZeile, 1).Resize(, 3).Value = Cells(Target.Row, 1).Resize(, 3).Value
.Cells(ZielZeile, 5).Resize(, 2).Value = Cells(Target.Row, 12).Resize(, 2).Value

.Cells(ZielZeile, 4).Value = txt 'Eintrag in Spalte D
End With

Rows(Target.Row).Delete

ElseIf Antwort = vbNo Then
Rows(Target.Row).Delete
End If

End If

End Sub


aber so passt es. Würd mich freuen, habe grad eben noch was gepostet, wenn du da auch mal einen Blick draufwirfst.

Danke
Christian
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige