kann mir jemand von euch helfen, den Code so abzuändern, dass der Ordner (in dem sich die Datei befindet) plus die darunterliegenden Unterordner abgefragt werden? Im Moment wird nur der Ordner ausgelesen, in dem sich die Datei befindet. Gerne würde ich diese Funktion (z. B. AllSubfolders) per True oder False aktivieren wollen. Und zusätzlich noch eine Möglichkeit, bestimmte Unterordner durch Angabe verschiedener Pfade abzufragen (Hierfür würde ich die Funktion AllSubfolders auf False setzen).
Hoffe, dass mir jemand weiterhelfen kann. Nach mehreren Versuchen komme ich leider nicht zu diesem Erfolg.
Sub Daten_aus_Protokollen_kopieren()
ActiveSheet.Range("A4:I1000").ClearContents 'Vorgegebenen Tabelleninhalt vor dem Kopieren _
_
der Daten löschen
Dim StatusCalc
'Makrobremsen lösen - Am Beginn eines Makros
With Application
.EnableEvents = False
StatusCalc = .Application.Calculation 'Aktuellen Berechnungsmodus merken
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
'Const sXlsPath = "C:\Users\admin\Desktop\Dokumente\" 'Pfad zu bestimmtem Ordner
'oder wenn sich die Dateien im selben Ordner befinden
sXlsPath = ThisWorkbook.Path 'Datei im gleichen Ordner wie Auswertungsdateien
Const iStartZeile = 4 'Angeben, ab welcher Zeile eingefügt werden soll
Const iStartSpalte = 1 'Angeben, ab welcher Spalte eingefügt werden soll
Const Zellen = "D3,K3,K7,H34,R3,D5,K5,R5,A29" 'Angeben, welche Zellen kopiert werden sollen
Dim oFso As Object, oFile As Object, oWkb1 As Workbook, oWks0 As Worksheet, oWks1 As _
Worksheet
Dim aCells As Variant, iNextLine As Long, i As Integer
Set oWks0 = ThisWorkbook.ActiveSheet
aCells = Split(Zellen, ","): iNextLine = iStartZeile
Set oFso = CreateObject("Scripting.FilesystemObject")
For Each oFile In oFso.GetFolder(sXlsPath).Files
If LCase(oFso.GetExtensionName(oFile.Name)) = "xlsx" Then 'Hier den Dateityp anpassen
If ThisWorkbook.Path oFile.Name Then
Set oWkb1 = Workbooks.Open(oFile.Path)
Set oWks1 = oWkb1.Sheets(1)
For i = 0 To UBound(aCells)
oWks0.Cells(iNextLine, iStartSpalte).Offset(0, i) = oWks1.Range(Trim(aCells( _
_
i))).Value
Next
oWkb1.Close False
iNextLine = iNextLine + 1
End If
End If
Next
Beenden: 'Sprungadresse zum Beenden diese Makros
'Makrobremsen zurücksetzen - vor dem Beenden eines Makros
With Application
.EnableEvents = True
.Calculation = StatusCalc
.ScreenUpdating = True
End With
End Sub