Ich möchte die Dateien eines Verzeichnisses mit durchlaufen vba in Excel 2010.
In der Schleife brauche ich:
- den Dateinamen und
- das Datum, an dem die Datei formatiert wurde.
Ich habe Folgendes codiert, was gut funktioniert, wenn der Ordner nicht mehr als 50 Dateien enthält, andernfalls ist es lächerlich langsam (ich brauche es, um mit Ordnern mit> 10000 Dateien zu arbeiten). Das einzige Problem dieses Codes besteht darin, dass das Nachschlagen file.name
extrem lange dauert.
Code, der funktioniert, aber waaaaaay zu langsam ist (15 Sekunden pro 100 Dateien):
Sub LoopThroughFiles()
Dim MyObj As Object, MySource As Object, file As Variant
Set MySource = MyObj.GetFolder("c:\testfolder\")
For Each file In MySource.Files
If InStr(file.name, "test") > 0 Then
MsgBox "found"
Exit Sub
End If
Next file
End Sub
Problem gelöst:
- Mein Problem wurde durch die folgende Lösung gelöst, indem
Dir
auf bestimmte Weise (20 Sekunden für 15000 Dateien) und zum Überprüfen des Zeitstempels mit dem BefehlFileDateTime
. - Unter Berücksichtigung einer anderen Antwort von unterhalb der 20 Sekunden wird auf weniger als 1 Sekunde reduziert.
code
Set MyObj = New FileSystemObjectObject
.Antworten:
Hier ist meine Interpretation als Funktion:
quelle
Dir
Nimmt Platzhalter, damit Sie einen großen Unterschied machen können, indem Sie den Filter fürtest
die Vorderseite hinzufügen und vermeiden, jede Datei zu testenquelle
Dir scheint sehr schnell zu sein.
quelle
FileDateTime
mein Problem gelöst.not
jedochtraverse the whole directory tree
. Falls erforderlich: AnalystCave.com/vba-dir-function-how-to-traverse-directories/…Die Dir-Funktion ist der richtige Weg, aber das Problem ist, dass Sie die
Dir
Funktion nicht rekursiv verwenden können , wie hier angegeben , nach unten .Die Art und Weise, wie ich damit umgegangen bin, besteht darin, die
Dir
Funktion zu verwenden, um alle Unterordner für den Zielordner abzurufen, sie in ein Array zu laden und das Array dann an eine wiederkehrende Funktion zu übergeben.Hier ist eine Klasse, die ich geschrieben habe, um dies zu erreichen. Sie beinhaltet die Möglichkeit, nach Filtern zu suchen. ( Sie müssen die ungarische Notation verzeihen, diese wurde geschrieben, als es der letzte Schrei war. )
quelle
Dir
Die Funktion verliert leicht den Fokus, wenn ich Dateien aus anderen Ordnern verarbeite und verarbeite.Ich habe mit der Komponente bessere Ergebnisse erzielt
FileSystemObject
.Das vollständige Beispiel finden Sie hier:
http://www.xl-central.com/list-files-fso.html
Vergessen Sie nicht, im Visual Basic-Editor einen Verweis auf Microsoft Scripting Runtime festzulegen (über Extras> Verweise).
Versuche es!
quelle
Probier diese. ( LINK )
quelle