Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro automatisch bei neuer Zeile ausführen

Makro automatisch bei neuer Zeile ausführen
30.04.2019 12:56:44
AxelF1977
Hallo zusammen,
ich hoffe Ihr könnt mir helfen. Ich habe ein wunderbares Makro, welches aus bestimmten spalten, Wertem in die Zelle rechts daneben kopiert. funktioniert wunderbar.
Nun soll dieses Makro automatisch beim Einfügen einer neuen Zeile ausgeführt werden. Aber nur dann. Ich bekomme es leider nicht hin.
Habt Ihr eine Idee? Die Tabelle ist als Tabelle formatiert, evtl. ist die Info noch wichtig
 _
Sub Leer()
Dim i As Long
Application.ScreenUpdating = False
With Sheets("Tabelle1")        'Tabellenname anpassen
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(i, "D") = "" Then .Cells(i, "D") = .Cells(i, "C")
If .Cells(i, "F") = "" Then .Cells(i, "F") = .Cells(i, "E")
If .Cells(i, "R") = "" Then .Cells(i, "R") = .Cells(i, "G")
If .Cells(i, "S") = "" Then .Cells(i, "S") = .Cells(i, "H")
If .Cells(i, "J") = "" Then .Cells(i, "J") = .Cells(i, "I")
If .Cells(i, "L") = "" Then .Cells(i, "L") = .Cells(i, "K")
If .Cells(i, "T") = "" Then .Cells(i, "T") = .Cells(i, "M")
If .Cells(i, "U") = "" Then .Cells(i, "U") = .Cells(i, "N")
If .Cells(i, "AC") = "" Then .Cells(i, "AC") = .Cells(i, "AB")
Next i
End With
Application.ScreenUpdating = True
End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro automatisch bei neuer Zeile ausführen
30.04.2019 13:10:27
Daniel
Halo Axel,
ins Tabellenblatt:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Target.EntireRow.Address Then
*Dein Code*
End If
End Sub
Löst allerdings auch aus, wenn du eine ganz Zeile entfernst. Ist das ein Problem?
Gruß
Daniel
Anzeige
AW: Makro automatisch bei neuer Zeile ausführen
30.04.2019 15:40:46
AxelF1977
Hallo Daniel,
danke für die Antwort. Danke an meine beiden lieben Kollegen, die in meinem Namen hier die Anfrage gestellt haben (und mich in Erklärungsnot in einem anderen Forum gebracht haben).
Das Makro soll immer nur für die neue Zeile ausgeführt werden, sonst arbeitet sich die Tabelle kaputt. Ich habe es soweit herausgefunden, das ich das eigentliche Macro per Call aufrufe. Aktuell tut es das aber für das ganze Tabellenblatt
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
Call Leer
End Sub

Anzeige
AW: Makro automatisch bei neuer Zeile ausführen
30.04.2019 15:46:25
Daniel
Du brauchst es nicht per Call aufzurufen, wenn du den Code reinschreibst macht es keinen Unterschied und ist übersichtlicher (meiner Meinung nach).
Wenn du nur die aktuelle Zeile mit dem Code belegen möchtest, ist es ja viel einfacher. Dann ändere deinen Code so:
 With Sheets("Tabelle1")        'Tabellenname anpassen
If .Cells(Target.Row, "D") = "" Then .Cells(Target.Row, "D") = .Cells(Target.Row, "C")
End With
Das muss dann aber natürlich ins Arbeitsblatt in den Worksheet_Change Code (da, wo bei mir *Dein Code* steht).
Gruß
Daniel
Anzeige
AW: Makro automatisch bei neuer Zeile ausführen
30.04.2019 16:44:38
AxelF1977
Ach, ich finde das mit dem call gar nicht übel.
aber gehen tut es nicht, was habe ich denn falsch gemacht?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Target.EntireRow.Address Then
Call Leer
End If
End Sub
Sub Leer()
Dim i As Long
Application.ScreenUpdating = False
With Sheets("Tabelle1")        'Tabellenname anpassen
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(Target.Row, "D") = "" Then .Cells(Target.Row, "D") = .Cells(Target.Row, "C")
If .Cells(Target.Row, "F") = "" Then .Cells(Target.Row, "F") = .Cells(Target.Row, "E")
If .Cells(Target.Row, "R") = "" Then .Cells(Target.Row, "R") = .Cells(Target.Row, "G")
If .Cells(Target.Row, "S") = "" Then .Cells(Target.Row, "S") = .Cells(Target.Row, "H")
If .Cells(Target.Row, "J") = "" Then .Cells(Target.Row, "J") = .Cells(Target.Row, "I")
If .Cells(Target.Row, "L") = "" Then .Cells(Target.Row, "L") = .Cells(Target.Row, "K")
If .Cells(Target.Row, "T") = "" Then .Cells(Target.Row, "T") = .Cells(Target.Row, "M")
If .Cells(Target.Row, "U") = "" Then .Cells(Target.Row, "U") = .Cells(Target.Row, "N")
If .Cells(Target.Row, "AC") = "" Then .Cells(Target.Row, "AC") = .Cells(Target.Row, "AB" _
)
Next i
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Makro automatisch bei neuer Zeile ausführen
30.04.2019 22:32:34
AxelF1977
Ich habe es jetzt seit Stunden probiert, leider komme ich zu keinem Ergebnis.
Entweder das Makro füllt die ganze Tabelle, oder nichts. Was mache ich falsch. ich hoffe einer der Profis hier hat eine Idee und Hilfe für mich. Ich wäre wirklich dankbar dafür.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Target.EntireRow.Address Then
Dim i As Long
Application.ScreenUpdating = False
With Sheets("Tabelle1")        'Tabellenname anpassen
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(i, "D") = "" Then .Cells(i, "D") = .Cells(i, "C")
If .Cells(i, "F") = "" Then .Cells(i, "F") = .Cells(i, "E")
If .Cells(i, "R") = "" Then .Cells(i, "R") = .Cells(i, "G")
If .Cells(i, "S") = "" Then .Cells(i, "S") = .Cells(i, "H")
If .Cells(i, "J") = "" Then .Cells(i, "J") = .Cells(i, "I")
If .Cells(i, "L") = "" Then .Cells(i, "L") = .Cells(i, "K")
If .Cells(i, "T") = "" Then .Cells(i, "T") = .Cells(i, "M")
If .Cells(i, "U") = "" Then .Cells(i, "U") = .Cells(i, "N")
If .Cells(i, "AC") = "" Then .Cells(i, "AC") = .Cells(i, "AB")
Next i
End With
Application.ScreenUpdating = True
End If
End Sub
Danke
Anzeige
AW: Makro automatisch bei neuer Zeile ausführen
30.04.2019 22:36:30
AxelF1977
Ich habe gerade gesehen, wenn ich die letzte Zeile lösche, dann füllt er mit folgerndem Code die verbleibenden Zellen richtig aus. Merkwürdig.
Bei neu eingefügten Zellen macht der Code nichts
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
If Target.Address = Target.EntireRow.Address Then
Application.ScreenUpdating = False
With Sheets("Tabelle1")        'Tabellenname anpassen
For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(i, "D") = "" Then .Cells(i, "D") = .Cells(i, "C")
If .Cells(i, "F") = "" Then .Cells(i, "F") = .Cells(i, "E")
If .Cells(i, "R") = "" Then .Cells(i, "R") = .Cells(i, "G")
If .Cells(i, "S") = "" Then .Cells(i, "S") = .Cells(i, "H")
If .Cells(i, "J") = "" Then .Cells(i, "J") = .Cells(i, "I")
If .Cells(i, "L") = "" Then .Cells(i, "L") = .Cells(i, "K")
If .Cells(i, "T") = "" Then .Cells(i, "T") = .Cells(i, "M")
If .Cells(i, "U") = "" Then .Cells(i, "U") = .Cells(i, "N")
If .Cells(i, "AC") = "" Then .Cells(i, "AC") = .Cells(i, "AB")
Next i
End With
Application.ScreenUpdating = True
End If
End Sub

Anzeige
AW: Makro automatisch bei neuer Zeile ausführen
30.04.2019 23:52:05
AxelF1977
Und wieder viel zu sehr um die Ecke gedacht, und Daniel hatte die Lösung gepostet.
Danke
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("Tabelle1")        'Tabellenname anpassen
If .Cells(Target.Row, "D") = "" Then .Cells(Target.Row, "D") = .Cells(Target.Row, "C")
If .Cells(Target.Row, "F") = "" Then .Cells(Target.Row, "F") = .Cells(Target.Row, "E")
If .Cells(Target.Row, "R") = "" Then .Cells(Target.Row, "R") = .Cells(Target.Row, "G")
If .Cells(Target.Row, "S") = "" Then .Cells(Target.Row, "S") = .Cells(Target.Row, "H")
If .Cells(Target.Row, "J") = "" Then .Cells(Target.Row, "J") = .Cells(Target.Row, "I")
If .Cells(Target.Row, "L") = "" Then .Cells(Target.Row, "L") = .Cells(Target.Row, "K")
If .Cells(Target.Row, "T") = "" Then .Cells(Target.Row, "T") = .Cells(Target.Row, "M")
If .Cells(Target.Row, "U") = "" Then .Cells(Target.Row, "U") = .Cells(Target.Row, "N")
If .Cells(Target.Row, "AC") = "" Then .Cells(Target.Row, "AC") = .Cells(Target.Row, "AB" _
)
End With
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro automatisch bei neuer Zeile ausführen


Schritt-für-Schritt-Anleitung

Um ein Makro automatisch bei der Eingabe einer neuen Zeile in Excel auszuführen, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Wähle das richtige Arbeitsblatt aus: Doppelklicke auf das Arbeitsblatt, in dem das Makro ausgeführt werden soll (z.B. "Tabelle1").

  3. Füge den Code ein: Kopiere den folgenden Code in das Codefenster des Arbeitsblatts:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = Target.EntireRow.Address Then
            With Sheets("Tabelle1") ' Tabellenname anpassen
                If .Cells(Target.Row, "D") = "" Then .Cells(Target.Row, "D") = .Cells(Target.Row, "C")
                If .Cells(Target.Row, "F") = "" Then .Cells(Target.Row, "F") = .Cells(Target.Row, "E")
                If .Cells(Target.Row, "R") = "" Then .Cells(Target.Row, "R") = .Cells(Target.Row, "G")
                If .Cells(Target.Row, "S") = "" Then .Cells(Target.Row, "S") = .Cells(Target.Row, "H")
                If .Cells(Target.Row, "J") = "" Then .Cells(Target.Row, "J") = .Cells(Target.Row, "I")
                If .Cells(Target.Row, "L") = "" Then .Cells(Target.Row, "L") = .Cells(Target.Row, "K")
                If .Cells(Target.Row, "T") = "" Then .Cells(Target.Row, "T") = .Cells(Target.Row, "M")
                If .Cells(Target.Row, "U") = "" Then .Cells(Target.Row, "U") = .Cells(Target.Row, "N")
                If .Cells(Target.Row, "AC") = "" Then .Cells(Target.Row, "AC") = .Cells(Target.Row, "AB")
            End With
        End If
    End Sub
  4. Speichere die Änderungen: Drücke CTRL + S, um die Änderungen zu speichern.


Häufige Fehler und Lösungen

  • Fehler: Das Makro wird auch bei Änderungen in bestehenden Zeilen ausgeführt.

    • Lösung: Stelle sicher, dass die Bedingung If Target.Address = Target.EntireRow.Address korrekt implementiert ist, um nur neue Zeilen zu erfassen.
  • Fehler: Das Makro füllt die gesamte Tabelle aus.

    • Lösung: Überprüfe, ob die Schleife im Makro korrekt auf die Target.Row verweist und nicht die gesamte Tabelle durchläuft.

Alternative Methoden

Eine alternative Methode, um das Makro auszuführen, besteht darin, den gesamten Code direkt in die Worksheet_Change-Ereignisprozedur einzufügen, anstatt ihn per Call aufzurufen. Dies kann die Übersichtlichkeit verbessern und die Funktionsweise vereinfachen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Target.EntireRow.Address Then
        ' Hier den gesamten Code für die Zellenaktualisierung einfügen
    End If
End Sub

Praktische Beispiele

Angenommen, Du fügst eine neue Zeile in Deine Tabelle ein. Wenn Du in Spalte C einen Wert eingibst und die Zeile neu erstellst, wird das Makro automatisch die entsprechenden Zellen in Spalte D bis AC ausfüllen, sofern diese leer sind. Dies spart Dir Zeit und vermeidet Fehler beim manuellen Ausfüllen.


Tipps für Profis

  • Optimierung der Performance: Um die Leistung des Makros zu verbessern, kannst Du Application.ScreenUpdating = False zu Beginn und Application.ScreenUpdating = True am Ende Deines Makros hinzufügen. Dies reduziert das Flackern des Bildschirms und beschleunigt die Ausführung.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass das Makro auch bei unerwarteten Eingaben stabil bleibt, z.B.:

    On Error Resume Next
    ' Dein Code
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das Makro nur bei neuen Zeilen ausgeführt wird?
Verwende die Bedingung If Target.Address = Target.EntireRow.Address im Worksheet_Change-Ereignis, um sicherzustellen, dass das Makro nur bei einer vollständigen Zeilenänderung ausgeführt wird.

2. Was tun, wenn das Makro nicht funktioniert?
Überprüfe den Code auf Syntaxfehler und stelle sicher, dass das Arbeitsblatt korrekt referenziert wird. Achte darauf, in der richtigen Tabelle zu arbeiten.

3. Kann ich das Makro für mehrere Arbeitsblätter verwenden?
Ja, Du kannst den Code in jedes Arbeitsblatt einfügen, aber Du musst sicherstellen, dass die Tabellenbezüge korrekt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige