ich benutze derzeit ein VBA zum importieren mehrerer Dateien aus einem Ordner, welches auch sehr gut funktioniert.
Nun benötige ich aber ein VBA, mit dem ich Dateien aus unterschiedlichen Ordnern importieren kann.
In jedem Ordner sind drei Dateien, die immer den selben Namen haben.
Die Ordnerstruktur sieht so aus:
Hauptordner\2019-09\Unterordner\*.*Datei.txt (immer der gleiche Name)
Hauptordner bleibt immer gleich, 2019-09 ändert sich, je nachdem welchen Monat ich auswerten möchte. Die Unterordner haben unterschiedlichen Namen.
Ich beziehe momentan den Dateipfad aus einer Zelle, damit ich den schnell ändern kann.
Gibt es eine Möglichkeit die verschiedenen Dateipfade untereinander in die Zellen zu schreiben, sodass das VBA über eine schleife jede Zelle liest und die entsprechenden Dateien aus den verschiedenen Ordner importiert.
Über Powerquery ist das nichts, da ich ständig den Dateipfad ändern muss.
Das Makro zu duplizieren und den Dateipfad nur anzupassen ist auch nichts, da immer wieder neue Ordner hinzukommen (also das eine mal muss ich auf z.b. 28 Unterordner mit je 3 Dateien und das andere mal auf z.b. 32 Unterordner zugreifen.
Das derzeitige Makro zum einlesen von mehreren Dateien eines Ordners welches ich nutze sieht so aus:
Sub Daten_einlesen()
Application.DisplayAlerts = False
Application.DisplayAlerts = True
Dim strFile As String
strPath = Sheets("01. Dateien").Range("C2")
strExt = "*BWA.txt"
If strPath = "" Then
Exit Sub
Else
strFile = Dir(strPath & strExt)
Do While Len(strFile) > 0
Workbooks.Open Filename:=strPath & strFile
ThisWorkbook.Worksheets.Add.Name = strFile
ThisWorkbook.Worksheets(strFile).Range("A1:AA10000").Value = _
Workbooks(strFile).Worksheets(1).Range("A1:AA10000").Value
Workbooks(strFile).Close False ' Arbeitsmappe wird geschlossen
strFile = Dir() ' nächste Datei wird ermittelt
Loop
End If
AnzahlRegister = Sheets.Count
For i = 1 To AnzahlRegister - 1
x = i
For Zähler = i + 1 To AnzahlRegister
If UCase$(Sheets(Zähler).Name) i Then Sheets(x).Move Sheets(i)
Next i
Sheets("01. Dateien").Select
Range("J3").Select
End Sub
Ich hoffe es ist verständlich geschrieben.
Viele Grüße
Florian