Inhalte von Datei zu Datei kopieren mit Schleifen Makro
Hallo Administrator Forum Team,
wieder einmal stehe ich vor einem kleinem Problem.
Ich kopiere Tabelleninhalte von einer Quelldatei in meine Zieldatei. Dies funktioniert soweit.
Jetzt aber die beiden Schleifenpunkte, die noch nicht funktionieren:
- in der Quelldatei können es mehrere Tabellen sein, deren Inhalt ich kopieren will (immer ab der ersten)
- in der Zieltabelle möchte ich alle Werte untereinander stehen haben
[j ist die Anzahl der Tabellen, die ich aus der Quelldatei importieren möchte. k = 1]
Ich habe das Gefühl, als ob mein Programmablauf nach einem Durchgang, nicht mehr in die Quelldatei zurück wechselt. Wie kann ich dieses Problem lösen?
Außerdem kopiert er nicht unter meine bestehenden Daten hinzu. Es passiert einfach nichts, wenn ich den Programmablauf noch einmal von vorne mit einer anderen Datei starte. Woran kann dies liegen?
Grüße
wieder einmal stehe ich vor einem kleinem Problem.
Ich kopiere Tabelleninhalte von einer Quelldatei in meine Zieldatei. Dies funktioniert soweit.
Jetzt aber die beiden Schleifenpunkte, die noch nicht funktionieren:
- in der Quelldatei können es mehrere Tabellen sein, deren Inhalt ich kopieren will (immer ab der ersten)
- in der Zieltabelle möchte ich alle Werte untereinander stehen haben
[j ist die Anzahl der Tabellen, die ich aus der Quelldatei importieren möchte. k = 1]
Do Until k = j + 1
'Inhalte kopieren
Worksheets(k).Range("8:65535").Copy
'Inhalte einfügen
If Ziel.Worksheets(2).Cells(1, 1) = "" Then
Ziel.Worksheets(2).Range("1:65535").PasteSpecial _
Paste:=xlPasteValues
Else
Letzte = IIf(IsEmpty(Ziel.Worksheets(2).Range("E65536")), Ziel.Worksheets(2).Range("E65536").End(xlUp).Row + 1, 65536)
'ab hier funktioniert es nicht mehr
Ziel.Worksheets(2).Cells(Letzte, 1).PasteSpecial _
Paste:=xlPasteValues
End If
k = k + 1
Loop
Ich habe das Gefühl, als ob mein Programmablauf nach einem Durchgang, nicht mehr in die Quelldatei zurück wechselt. Wie kann ich dieses Problem lösen?
Außerdem kopiert er nicht unter meine bestehenden Daten hinzu. Es passiert einfach nichts, wenn ich den Programmablauf noch einmal von vorne mit einer anderen Datei starte. Woran kann dies liegen?
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 86216
Url: https://administrator.de/forum/inhalte-von-datei-zu-datei-kopieren-mit-schleifen-makro-86216.html
Ausgedruckt am: 20.02.2025 um 19:02 Uhr
4 Kommentare
Neuester Kommentar
Hallo Shaggy84!
Einmal abgesehen von der etwas abenteuerlichen Schleife (wenn Du die Anzahl der Tabellen kennst und diese schon unbedingt in einer Variable "j" speichern musst, wäre zumindest eine Zählschleife der Art
die üblichere Schreibweise, ansonsten aber wenigstens "Do While k <= j"), gibt es zwei echte Probleme:
Zunächst hast Du zwar für die Zielmappe eine Variable ("Ziel") verwendet, nicht aber für die Quelle - falls das Makro aus der Quellmappe heraus gestartet wird, könntes Du das etwa so nachholen
und dann vor dem jeweilgen Kopiervorgang ein
einbauen.
Außerdem wird es Dir (ein Excel < 2007 vorausgesetzt) auch von Hand nicht gelingen, in einer Tabelle 65528 Zeilen (wieso sparst Du eigentlich die Zeile 65536 aus?) zu markieren und diese in einer anderen Tabelle zB ab Zeile 200 wieder einzufügen - insofern wird es nötig sein, den zu kopierenden Bereich in der Quellmappe einzugrenzen, etwa mit
Schließlich könntest Du dann noch (der Ordnung halber) nach der Schleife den (eigentlich noch offenen) Kopiervorgang mit
abbrechen ...
Grüße
bastla
Einmal abgesehen von der etwas abenteuerlichen Schleife (wenn Du die Anzahl der Tabellen kennst und diese schon unbedingt in einer Variable "j" speichern musst, wäre zumindest eine Zählschleife der Art
For k = 1 To j
...
Next
Zunächst hast Du zwar für die Zielmappe eine Variable ("Ziel") verwendet, nicht aber für die Quelle - falls das Makro aus der Quellmappe heraus gestartet wird, könntes Du das etwa so nachholen
Set Quelle = ThisWorkbook
Quelle.Worksheets(k).Activate
Außerdem wird es Dir (ein Excel < 2007 vorausgesetzt) auch von Hand nicht gelingen, in einer Tabelle 65528 Zeilen (wieso sparst Du eigentlich die Zeile 65536 aus?) zu markieren und diese in einer anderen Tabelle zB ab Zeile 200 wieder einzufügen - insofern wird es nötig sein, den zu kopierenden Bereich in der Quellmappe einzugrenzen, etwa mit
Range("A8", ActiveCell.SpecialCells(xlLastCell)).Copy
Application.CutCopyMode = False
Grüße
bastla
Hallo Shaggy84!
Deine "Idee zum zurück wechseln in die Quelldatei" wäre auch meine, allerdings sollte die "Set"-Zeile lauten:
Hinsichtlich des zu kopierenden Bereiches: Gibt es vielleicht eine Spalte (für das Beispiel unten Spalte A), die in jeder Zeile einen Wert enthält (zB eine laufende oder Artikel-Nr etc) - dann würde ich dort ansetzen und die letzte Zeile so suchen:
Grüße
bastla
Deine "Idee zum zurück wechseln in die Quelldatei" wäre auch meine, allerdings sollte die "Set"-Zeile lauten:
Set Quelle = ActiveWorkbook
Hinsichtlich des zu kopierenden Bereiches: Gibt es vielleicht eine Spalte (für das Beispiel unten Spalte A), die in jeder Zeile einen Wert enthält (zB eine laufende oder Artikel-Nr etc) - dann würde ich dort ansetzen und die letzte Zeile so suchen:
k = 8
Do While Cells(k, "A").Value <> ""
k = k + 1
Loop
LetzteZeile = k - 1
Grüße
bastla