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

Forumthread: In neue Datei einfügen erste leere Zeile

In neue Datei einfügen erste leere Zeile
09.02.2017 14:12:00
RE
Hallo zusammen
Ich brauche einen VBA Code, bei dem ich einen ausgewählten Bereich der Datei A nach Datei B kopieren kann (Per Cmd Button).
Das kopieren klappt, allerdings komm ich mit dem "erste leere Zeile" suchen und dann unten anfügen nicht weiter. Ich möchte ja nicht, dass es das erste kopieren überschreibt. Ich hoffe es kann mir jemand weiterhelfen?
Hier mein aktueller Code, welcher soweit funktioniert.
Sub copy()
Selection.copy
Windows("Zusammenfassung Sales.xlsm").Activate
Range("C4").PasteSpecial xlPasteValues
ActiveSheet.Paste
'kopieren mit Ctrl+Shift+C
End Sub

Danke für eure Unterstützung,
Gruss,RE
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 14:22:20
harry
Hallo,
das Ende einer Liste kannst Du ausgehend von Zelle A1 folgendermaßen ermitteln:
ende = Sheets("Tabelle1").Cells(1, 1).End(xlDown).Row
dieser Code findet die letzte befüllte Zeile vor einer leeren Zelle in Spalte A,
wenn in Deiner Liste also leere Zellen vorkommen, funktioniert das so nicht!
Dann müsste man sich von unten an Deine Liste annähern, mit xlUp!
Grüße
harry
Anzeige
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 14:58:34
RE
Hallo Harry
Danke für deine rasche Antwort. Geh ich richtig in der Annahme, dass mein "Range("C4") etc. weggelassen werden kann?
Wenn ich deinen Teil noch reinnehme, dann kommt die Fehlermeldung "Objekt unterstützt diese Eigenschaft oder Methode nicht".
Der zu kopierende Bereich müsste an erster Stelle in C4, nachher C5, C6 etc. eingefügt werden.
Irgendwas stimmt bei meinem Code nicht, ich habe aber noch keinen Durchblick...
Sub copy()
Selection.copy
Windows("Zusammenfassung Sales.xlsm").Activate
Range("C4").PasteSpecial xlPasteValues
ActiveSheet.Paste
Sheets("Sales").Cells(4, 3).End(xlDown).Row
'kopieren mit Ctrl+Shift+C
End Sub

Anzeige
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 15:13:20
harry
Hallo,
abgesehen davon, dass das mit dem ganzen select und activate noch eleganter geht (aber so macht es eben der Recorder), so müsste es gehen:
Sub copy()
ende=Sheets("Sales").Cells(4, 3).End(xlDown).Row+1
Selection.copy
Windows("Zusammenfassung Sales.xlsm").Activate
Range("C" & ende).PasteSpecial xlPasteValues
ActiveSheet.Paste
End Sub

Anzeige
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 15:22:41
RE
Hmm, jetzt kommt die Meldung "Index ausserhalb des gültigen Bereichs".
Das File wo die Daten reinkopiert werden heisst "Zusammenfassung Sales.xlsm". Die Mappe heisst "Sales"
Stimmt doch oder?
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 15:57:46
harry
Hallo,
ok, Du startest das Script wahrscheinlich bei aktiver Quelldatei. Dort gibt es wahrscheinlich kein Blatt "Sales".
Dann müsste die Zeile mit dem ende=... nach unten gerutscht werden, nach Windows ... Activate.
Grüße
harry
Anzeige
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 16:04:03
RE
Hallo Harry
Ich muss beide Dateien öffnen, damit das Kopieren funktioniert. Ins File, in das reinkopiert wird, heisst die Mappe "Sales" (Ursprünglich Tabelle1)
Nun kommt die Fehlermeldung, "Die Methode Range für das Objekt _Global ist fehlgeschlagen?
Ist VBA wirklich so komlpiziert? :-)
Anzeige
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 16:14:20
harry
Also, einigermaßen sauber geht das so
Sub copy()
Workbooks("Quelle").Sheets("Tabelle1").Range("a1:h10").copy
ende = Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Cells(4, 3).End(xlDown).Row + 1
Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Range("C" & ende).PasteSpecial  _
xlPasteValues
Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Paste
End Sub
Dann ist egal welche Mappe gerade aktiv ist!
Grüße
harry
Anzeige
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 16:24:49
RE
Jetzt habe ich die Meldung Anwendungs oder objektdefinierter Fehler.
Eigentlich will ich nur, dass ich von einer Datei, einen Bereich, egal welche Mappe kopieren kann(selection.copy) und diesen kopierten Bereich dann in der Datei "Zusammenfassung Sales.xlsm", in der Mappe "Sales" in die Spalte C in die nächste leere Zelle von unten reinkopieren kann...
Den Code oben habe ich nun angepasst
Sub copy()
Selection.copy
ende = Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Cells(4, 3).End(xlDown).Row + 1
Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Range("C" & ende).PasteSpecial _
xlPasteValues
Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Paste
End Sub
Tut mit leid wenn ich dich mit dem belästige, aber ich bin da noch zu wenig drin...
Anzeige
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 16:38:24
harry
Hallo,
sorry, ich geb auf, bei mir hat der Code funktioniert (getestet)
good luck
AW: In neue Datei einfügen erste leere Zeile
09.02.2017 16:46:18
RE
Hmm schade, danke trotzdem
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

In neue Datei einfügen: Erste leere Zeile finden


Schritt-für-Schritt-Anleitung

  1. Öffne die beiden Excel-Dateien: Stelle sicher, dass sowohl die Quelldatei als auch die Zieldatei geöffnet sind.

  2. Eingabe des VBA-Codes: Gehe in den VBA-Editor (Alt + F11) und erstelle ein neues Modul. Kopiere den folgenden Code in das Modul:

    Sub copy()
       Dim ende As Long
       Selection.Copy
       ' Finde die erste leere Zelle in Spalte C der Zieldatei
       ende = Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Cells(Rows.Count, 3).End(xlUp).Row + 1
       ' Füge die kopierten Werte in die erste leere Zeile ein
       Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Cells(ende, 3).PasteSpecial xlPasteValues
    End Sub
  3. Anpassung des Codes: Achte darauf, dass die Namen der Arbeitsmappen und Arbeitsblätter korrekt sind. In diesem Beispiel wird die Datei „Zusammenfassung Sales.xlsm“ und das Blatt „Sales“ verwendet.

  4. Ausführen des Codes: Wähle den gewünschten Bereich in der Quelldatei aus und führe das Makro aus (F5 oder über die Schaltfläche im Menü).


Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des gültigen Bereichs"
    Ursache: Du versuchst, auf ein Blatt zuzugreifen, das nicht existiert oder nicht aktiv ist.
    Lösung: Stelle sicher, dass die angegebenen Blätter und Arbeitsmappen in deinem Code korrekt sind.

  • Fehler: "Die Methode Range für das Objekt _Global ist fehlgeschlagen"
    Ursache: Möglicherweise hast du einen Bezug zu einer nicht existierenden Zelle oder einem nicht geöffneten Arbeitsblatt.
    Lösung: Überprüfe die Namen der Arbeitsblätter und stelle sicher, dass sie existieren.

  • Fehler: "Anwendungs- oder objektdefinierter Fehler"
    Ursache: Oft tritt dieser Fehler auf, wenn auf eine Zelle oder einen Bereich zugegriffen wird, der nicht existiert.
    Lösung: Überprüfe, ob die Zelle, auf die verwiesen wird, tatsächlich leer ist oder ob der Bereich korrekt definiert ist.


Alternative Methoden

  • Verwendung von Formeln: Wenn du nicht mit VBA arbeiten möchtest, kannst du auch eine Formel verwenden, um die erste leere Zeile zu finden. Zum Beispiel:

    =VERGLEICH(„*“;C:C;0)
  • Manuelles Kopieren und Einfügen: Du kannst den gewünschten Bereich manuell kopieren und dann in die nächste leere Zeile einfügen, indem du die Leertaste in Spalte C drückst, bis du die leere Zeile findest.


Praktische Beispiele

  1. Kopieren von Daten aus einer Liste: Wenn du einen Bereich von „A1:H10“ in eine neue Datei kopieren möchtest:

    Sub copy()
       Selection.Copy
       ende = Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Cells(Rows.Count, 3).End(xlUp).Row + 1
       Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Range("C" & ende).PasteSpecial xlPasteValues
    End Sub
  2. Erste leere Zeile in einer anderen Spalte finden: Wenn du die erste leere Zelle in der Spalte D suchen möchtest:

    ende = Workbooks("Zusammenfassung Sales.xlsm").Sheets("Sales").Cells(Rows.Count, 4).End(xlUp).Row + 1

Tipps für Profis

  • Vermeide Select und Activate: Statt Select oder Activate zu nutzen, arbeite direkt mit Objekten. Dies macht deinen Code effizienter und weniger fehleranfällig.

  • Fehlerbehandlung einbauen: Füge eine Fehlerbehandlung in deinen Code ein, um mögliche Probleme abzufangen:

    On Error Resume Next
    ' Dein Code
    On Error GoTo 0
  • Makros dokumentieren: Schreibe Kommentare in deinen Code, um die Funktionsweise für zukünftige Referenzen klar zu machen.


FAQ: Häufige Fragen

1. Wie finde ich die erste leere Zelle in einer Zeile?
Du kannst die Methode End(xlRight) verwenden, um von links nach rechts zu suchen und die erste leere Zelle zu finden.

2. Kann ich auch mehrere Zellen gleichzeitig kopieren?
Ja, du kannst auch einen größeren Bereich auswählen und diesen mithilfe von Selection.Copy kopieren. Achte darauf, dass du den Zielbereich entsprechend anpasst.

3. Was ist der Unterschied zwischen Paste und PasteSpecial?
Paste fügt alles ein (Formatierungen, Formeln, Werte), während PasteSpecial dir ermöglicht, spezifische Aspekte, wie nur die Werte, einzufügen.

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