ich möchte Daten aus mehreren Excel-Dateien auslesen und in einer bestehenden Zieldatei, in einem Tabellenblatt fortlaufend einfügen. Ich habe dafür einen Code im Netz gefunden, der auch soweit ganz gut funktioniert. Allerdings dauert die Prozedur bei mehreren Dateien relativ lange. Ich habe mir sagen lassen, dass es daran liegt, dass das Makro einzelne Zellen kopiert und einfügt bzw. über Zeilen und Spalten geht. Es soll wohl besser sein, wenn das Makro einfach die jeweils genutzten Zeilen der Quelldateien ausließt und in die Zieldatei einfügt.
Ich habe jetzt schon mehrere Tage vergeblich versucht den Code entsprechend umzubauen. Meine VBA Kentnisse reichen hierfür leider nicht aus.
Gibt es hier eventuell liebe Menschen, die mir den Code wie oben beschrieben anpassen könnten?
Hier der aktuelle, funktionierende aber sehr langsame Code:
Sub DateienEinlesen()
On Error GoTo Err
Dim oTargetSheet As Object
Dim oSourceBook As Object
Dim sPfad As String
Dim sDatei As String
Dim lErgebnisZeile As Long
Dim s As Long
Dim z As Long
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
'Schritt 1: Arbeitsblatt für die Ergebnisse
Set oTargetSheet = ThisWorkbook.Sheets("Bestellkonsolidierung")
lErgebnisZeile = 2 'Ergebnisse eintragen ab Zeile 1
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
sPfad = InputBox("Bitte Pfad eingeben", "Pfad") & "\"
sDatei = Dir(CStr(sPfad & "*.xl*")) 'Alle Excel Dateien
Do While sDatei ""
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend öffnen
'Datenübertragung alle genutzten Zeilen und Spalten
For z = 2 To oSourceBook.Sheets("Data").UsedRange.Rows.Count
'Keine Leerzeilen verarbeiten
If Trim(CStr(oSourceBook.Sheets("Data").Cells(z, 1).Value)) "" Then
For s = 1 To oSourceBook.Sheets("Data").UsedRange.Columns.Count
'Spalte 1 - Dateinamen
oTargetSheet.Cells(lErgebnisZeile, 1).Value = sDatei
'Spalte 2 bis n - Tabelleninhalte des Arbeitsblattes "Tabelle1"
oTargetSheet.Cells(lErgebnisZeile, s + 3).Value = _
oSourceBook.Sheets("Data").Cells(z, s).Value
Next s
lErgebnisZeile = lErgebnisZeile + 1
End If
Next z
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'Nächste Datei
sDatei = Dir()
Loop
Application.ScreenUpdating = True 'Das Bildschirm-Aktualisieren wieder einschalten
'Variablen aufräumen
Set oTargetSheet = Nothing
Set oSourceBook = Nothing
ThisWorkbook.Sheets("Bestellkonsolidierung").Select
Exit Sub
Err:
MsgBox "Fehler in Sub" & Err.Number & ": " & Err.Description, vbCritical + vbOKOnly
End Sub
Ich würde mich sehr freuen, wenn mir jemand helfen könnte.
Vorab vielen Dank und viele Grüße
Alex