VBA-Makro - Zeilen aus Blatt 1 in Blatt 2 kopieren

skyward159

Lt. Junior Grade
Registriert
Nov. 2009
Beiträge
289
Hallo liebe Schwarmintelligenz,

vorab, ich habe keine Ahnung von VBA und nutze ChatGPT um mir zu behelfen.

Folgendes Szenario:

In meiner Datei im ersten Tabellenblatt habe ich meine zu bearbeitenden Fälle gelistet mit verschiedenen Daten wie Namen, Eingangsdatum, Bemerkungen etc. - die letzte Spalte ist mit "Erledigt" betitelt.

Wenn ich in der Spalte erledigt bei einem Fall ein "Ja" reinschreibe, soll der Fall automatisch in mein zweites Tabellenblatt ausgeschnitten werden.

Was funktioniert:
Kopieren der Zeilen aus Blatt 1 und auffüllen der leeren Zeilen
Einfügen der Zeilen in Blatt 2

Was nicht funktioniert:
Lasse ich das Makro ein zweites Mal laufen, werden die Daten in Blatt 2 überschrieben, anstatt das die zu kopierenden Daten in neue Zeilen gesetzt werden.

Das Makro sieht wie folgt aus:

Code:
Sub VerschiebeNachErledigt()
    Dim wsEG As Worksheet
    Dim wsErledigt As Worksheet
    Dim letzteZeileEG As Long
    Dim letzteZeileErledigt As Long
    Dim i As Long
    Dim nextErledigtRow As Long
    
    ' Setze die Arbeitsblätter
    Set wsEG = Worksheets("EG")
    Set wsErledigt = Worksheets("erledigt")
    
    ' Finde die letzte Zeile in den jeweiligen Blättern
    letzteZeileEG = wsEG.Cells(wsEG.Rows.Count, "L").End(xlUp).Row
    letzteZeileErledigt = wsErledigt.Cells(wsErledigt.Rows.Count, "A").End(xlUp).Row
    
    ' Bestimme die nächste freie Zeile im erledigt-Blatt
    nextErledigtRow = letzteZeileErledigt + 1
    
    ' Durchlaufe die Zeilen im EG-Blatt
    For i = 2 To letzteZeileEG ' Annahme: Die Überschriften sind in der ersten Zeile
        ' Überprüfe, ob in Spalte L "Ja" steht
        If UCase(wsEG.Cells(i, "L").Value) = "JA" Then
            ' Kopiere die Werte nach erledigt in die nächste freie Zeile
            wsEG.Rows(i).Copy Destination:=wsErledigt.Rows(nextErledigtRow)
            ' Erhöhe die nächste freie Zeile im erledigt-Blatt
            nextErledigtRow = nextErledigtRow + 1
            ' Lösche die Zeile in EG
            wsEG.Rows(i).Delete
            ' Verringere i, um die Schleife nach dem Löschen fortzusetzen
            i = i - 1
        End If
    Next i
End Sub

Weiß jemand Rat?

Danke :)
 
Ich bin zwar lange raus, aber müßte man da nicht einige Variable auf Global setzen, damit sie beim 2. Durchlauf noch vorhanden sind?

Bei Privat gelten sie ja nur innerhalb der Prozedur oder so.
 
Beim Löschen sollte man die Schleife grundsätzlich rückwärts laufen lassen.
Code:
For i = letzteZeileEG To 2 Step -1
 
Ja!
Selbstredend, dass dann Zeile 31 gelöscht werden muss.
Auch klar, dass Du an einer Kopie probieren musst.
 
CHatGPT macxht das, was du sagst!
Wenn du den Fehler genau sagst, dann ist das Makro Safe!
Versuche es direkt genau zu beschreiben. Dann macht dir die KI ein super Makro!
Nutz es auch, 100% Erfolg.
 
duAffentier schrieb:
CHatGPT macxht das, was du sagst!
Wenn du den Fehler genau sagst, dann ist das Makro Safe!
Versuche es direkt genau zu beschreiben. Dann macht dir die KI ein super Makro!
Nutz es auch, 100% Erfolg.

Ich habs bereits acht mal versucht das Problem zu umschreiben, leider bisher ohne Erfolg :(
Deswegen meine Nachfrage hier.
 
Wer es nicht Hauptberuflich macht, nur "Nebenbei" und komplexe Abläufe damit automatisieren kann, super!
Das Fornen durchstöbern, Leute Fragen etc., somit kann man viele Aufgaben erledigen und große Makros sind kein Problem. Hauptsache ich kann Arbeit von 1h auf 2min kürzen.
 
Ich sehe hier erstmal gar keine Notwendigkeit einer Programmierung.
Vielmehr wäre mein Ansatz alles als Tabelle zu formatieren und dann die entsprechende Spalte mit dem DropDown zu filtern das nur offene Posten angezeigt werden. Gibt keinen Grund die Datensätze zu zerlegen, womöglich ist Excel aber das völlig falsche Werkzeug.
 
  • Gefällt mir
Reaktionen: skyward159
Wenn du CHatGPT sagst, was nicht geht, kann er den Code anpassen!
Also genau das da schreiben, was du hier schreibst.
Sowas wie "Daten fortlaufend in der Tabelle anfügen" etc.
 
morcego schrieb:
Ich sehe hier erstmal gar keine Notwendigkeit einer Programmierung.
Vielmehr wäre mein Ansatz alles als Tabelle zu formatieren und dann die entsprechende Spalte mit dem DropDown zu filtern das nur offene Posten angezeigt werden. Gibt keinen Grund die Datensätze zu zerlegen, womöglich ist Excel aber das völlig falsche Werkzeug.

Ja, ich denke so oder so ähnlich werde ich das nun lösen. Ich habe viel zu kompliziert gedacht.

Danke.
 
Kleiner Tipp, auch wenn man nicht so viel mit Excel macht, du sowieso KI nutzt, evtl dein Vorhaben der KI schreiben und eine Lösung suchen lassen. Manchmal gibt es echt einfache Wege, anstatt gleich die eigene Lösung per VBA zu lösen. FÜr normale Themen, da kann man auch super die Lösungsansätze von KI prüfen lassen.
 
  • Gefällt mir
Reaktionen: skyward159
Zurück
Oben