Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1588to1592
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Files suchen, auch in Unterverzeichnissen

Files suchen, auch in Unterverzeichnissen
06.11.2017 16:24:18
Werner
Hallo Forum,
in einem fertigen Projekt habe ich nun festgestellt, dass meine Lese-Routine (kopiert aus dem Internet, (woher: ?)) zwar viele Files findet. Aber sie hat einige Unterverzichnisse einfach vergessen.
Ich habe mir jetzt ein paar Beispiele aus dem Internet heruntergeladen; keines davon hat funktioniert. Es gab immer wieder Abbrüche. Und eine Routine hat sogar meinen Papierkorb durchsucht.
Ich suche eine Leseroutine, die bestimmte (möglichst generische) File-Typen (z. B. "XLS*") sucht und deren Pfad und Namen in ein Tabellenblatt schreibt. Dabei sollten natürlich auch alle Unterverzeichnisse durchsucht werden.

Wer kann mir ein einfaches und überschaubares Beispiel bereitstellen?

Danke im Voraus.
Werner

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Files suchen, auch in Unterverzeichnissen
06.11.2017 16:35:57
Michael
Hallo!
Sub a()
Dim Fso, Verzeichnis, Unterverzeichnis, Datei
Dim Stapel As Collection
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Stapel = New Collection
Stapel.Add Fso.GetFolder("DeinStartPfad") 'C:\Test\... o.Ä.
Do While Stapel.Count > 0
Set Verzeichnis = Stapel(1)
Stapel.Remove 1
For Each Unterverzeichnis In Verzeichnis.SubFolders
Stapel.Add Unterverzeichnis
Next oSubfolder
For Each Datei In Verzeichnis.Files
If Datei.Name Like "*.pdf" Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = Datei.Name
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = Datei.Path
End If
Next oFile
Loop
End Sub
Ist das einfach und überschaubar?
LG
Michael
Anzeige
AW: Files suchen, auch in Unterverzeichnissen
06.11.2017 16:51:27
Werner
Hallo Michael,
Danke für Dein Beispiel. Aber es läuft nicht: ich bekomme bei der Zeile
Next oSubfolder
Eine Fehlermeldung: ungültiger Verweis auf Next-Steuervariable.
Gruß
Werner
AW: Files suchen, auch in Unterverzeichnissen
06.11.2017 17:09:16
Zwenn
Sind nur falsche Variablennamen. So müsste es gehen:

Sub a()
Dim Fso, Verzeichnis, Unterverzeichnis, Datei
Dim Stapel As Collection
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Stapel = New Collection
Stapel.Add Fso.GetFolder("DeinStartPfad") 'C:\Test\... o.Ä.
Do While Stapel.Count > 0
Set Verzeichnis = Stapel(1)
Stapel.Remove 1
For Each Unterverzeichnis In Verzeichnis.SubFolders
Stapel.Add Unterverzeichnis
Next Unterverzeichnis
For Each Datei In Verzeichnis.Files
If Datei.Name Like "*.pdf" Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = Datei.Name
Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = Datei.Path
End If
Next Datei
Loop
End Sub

Anzeige
Ja, hab's gut gemeint und...
06.11.2017 17:22:59
Michael
... Wollte leichter nachvollziehbare Variablennamen nutzen; hab dann aber nur schlampig ersetzt.
Danke für's Ergänzen, Zwenn!
Lg
Michael
AW: Files suchen, auch in Unterverzeichnissen
06.11.2017 17:28:43
Werner
Sorry,
aber auch dieses Beispiel läuft nicht.
Als Sotartpfad habe ich "D:\" angegeben, und bei Like auf ".xls"
Noch bevor mir die erste File im Tabellenblatt eingetragen wird, erhalte ich einen "Laufzeitfehler 70" verbunden mit "Zugriff verweigert".
Gruß
Werner
AW: Files suchen, auch in Unterverzeichnissen
06.11.2017 17:07:40
Peter(silie)
Hallo,
es wäre schön wenn du dann auch diese kopierten Codes uns hier zeigst...
Für sowas ist VBS die bessere Wahl.
Rekursive Datei Suche kann ewig dauern, wenn der nutzer auf die tolle
Idee kommt als Start-Pfad C:\ anzugeben.
Was genau für dich ein einfach und überschaubares Beispiel ist weiß ich nicht,
wenn dir der Code unten nicht einfach und überschaubar genug ist, dann geb bescheid.
Private fso As Object, folder_ As Object, sub_ As Object, file_ As Object
Private FoundFiles As String
Sub test()
Set fso = CreateObject("Scripting.FileSystemObject")
File_Search "C:\Users\max.bader\Desktop"
Dim tmp() As String
tmp = Split(FoundFiles, ";")
Dim varItem
For Each varItem In tmp
Debug.Print varItem
Next varItem
End Sub
Private Function File_Search(ByVal Path_ As String) As String
Set folder_ = fso.GetFolder(Path_)
On Error Resume Next
For Each file_ In sub_.Files
If file_.Name  vbNullString Then
If InStr(1, file_.Name, ".xl", vbTextCompare) > 0 Then
FoundFiles = FoundFiles & file_.Path & ";"
End If
End If
Next file_
For Each sub_ In folder_.Subfolders
File_Search sub_.Path
Next sub_
End Function

Anzeige
Ja, allerd. ist mein o.a. Code NICHT rekursiv, oT
06.11.2017 17:25:44
Michael
AW: Ja, allerd. ist mein o.a. Code NICHT rekursiv, oT
06.11.2017 17:51:35
Werner
Danke. Die oben dargestellte Version läuft ohne Probleme durch. Habe wieder mein Startverzeichnis D:\ genommen.
Und das Verzeichnis, dass meine alte Routine "übersehen" hat, wird jetzt auch angezeigt.
Und statt debug.print schreibe ich die Namen in ein Tabellenblatt:
'Debug.Print varItem
Zeile = Zeile + 1
Cells(Zeile, 1).Value = varItem
Jetzt habe ich nur noch ein kleines Problem mit dem "Filter". In meiner Liste tauchen Files auf, wenn in deren Name irgendwo ".xl" auftaucht.
Wie müsste man das auf den letzten Teil des File-Namens beschränken?
Gruß und Danke
Werner
Anzeige
AW: Ja, allerd. ist mein o.a. Code NICHT rekursiv, oT
06.11.2017 18:04:46
Daniel
Hi
Wenn du nur neue Dateien suchst (xlsx, xlsm, xlsb), dann verwende das Fragezeichen als Joker und suche nach "*.xls?"
Suchst du auch nach alten xls-Dateien, musst du wahrscheinlich die Suche extra durchführen und nach "*.xls" suchen.
Gruß Daniel
AW: Ja, allerd. ist mein o.a. Code NICHT rekursiv, oT
06.11.2017 18:14:41
Werner
Hallo Daniel,
Danke für Deine Antwort. Nur ist das nicht die Lösung meines Problems. Die Unterschiede zwischen den einzelnen Excel-Namen sind mir bekannt. Das Problem der aktuellen VBA-Version: sie findet auch Files, die nicht mit ".XL" und irgendwas enden, sondern mitten im Namen in ".XL" haben.
Gruß
Werner
AW: Ja, allerd. ist mein o.a. Code NICHT rekursiv, oT
06.11.2017 18:31:15
Peter(silie)
Hallo,
versuche mal folgendes:
Diesen Teil ändern
If InStr(1, file_.Name, ".xl", vbTextCompare) > 0 Then
In:

If Right(file_.Name, Len(file_.Name) - InStrRev(file_.Name, ".")) Like "xls*" Then

Anzeige
AW: Files suchen, auch in Unterverzeichnissen
06.11.2017 17:39:15
Hajo_Zi
Hallo Werner,
http://hajo-excel.de/gepackt/vba2007/ordner_auslesen_hyperlink2007.zip

Ich gebe keinen Dank für eine Rückmeldung, da ich durch solche Beiträge nicht meine Beitragszahl erhöhen muss.
Also ich schreibe keine Beiträge mit dem Betreff "Gerne u. Danke für die Rückmeldung. o.w.T."
Rückmeldung ist ja in der Heutigen Zeit nicht üblich und die wenigen die eine Rückmeldung geben, mögen mir das verzeihen, das kein Danke für eine Rückmeldung kommt.
Beiträge von Werner, Luc, robert und folgende lese ich nicht.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige