Durchlaufen Sie Dateien in einem Ordner mit VBA
- Durchlaufen Sie Dateien in einem Ordner mit VBA
-
Verwenden Sie die
Dir
-Funktion -
Verwenden Sie das
File System Object
- Die bessere Lösung
- Abschluss
Visual Basic for Applications ist eine ereignisgesteuerte Programmiersprache, die für Microsoft Office entwickelt wurde. Es ermöglicht Ihnen, Aufgaben zu automatisieren und Funktionalitäten an Ihre Anforderungen anzupassen.
VBA ist ziemlich leistungsfähig und ermöglicht es dem Benutzer, alles mit nur wenigen Codeanweisungen zu erledigen.
In diesem Artikel wird beschrieben, wie Dateien, die in einem Ordner gespeichert sind, mithilfe von VBA durchlaufen werden. Zwei Methoden wurden unten im Detail besprochen und Codeausschnitte wurden bereitgestellt.
Durchlaufen Sie Dateien in einem Ordner mit VBA
Mit VBA können Benutzer Dateien durchlaufen, die in einem bestimmten Verzeichnis gespeichert sind, und ihre Namen, Zeitstempel, Erweiterungen usw. abrufen. Sie können jede Aktion ausführen, indem Sie auf das Verzeichnis zugreifen, z. B. neue Dateien erstellen oder die alten ändern.
In diesem Artikel wurden zwei Lösungen erwähnt, die jeweils eine andere Zugriffszeit haben. VBA ermöglicht es Benutzern, Dateien in einem Ordner mit der Funktion Dir
zu durchlaufen und ein File System Object
zu erstellen.
Die verschiedenen Lösungen werden unten diskutiert.
Verwenden Sie die Dir
-Funktion
Das folgende Code-Snippet ermöglicht es dem Benutzer, Dateien in einem Ordner mit der Funktion Dir
zu durchlaufen. Die Funktion Dir
ist als Verzeichnisfunktion bekannt.
Es ist eine eingebaute VBA-Funktion, die den Pfad der Datei als Parameter nimmt und den Namen der Datei zurückgibt.
Wenn der Pfad einen Ordner darstellt, gibt die Funktion Dir
den Namen der ersten Datei zurück, die auf dem Pfad gespeichert ist. Das folgende Code-Snippet stellt dar, wie die Funktion Dir
dabei hilft, Dateien in einem Ordner zu durchlaufen.
Sub example()
Dim fileName As Variant
fileName = Dir("C:\User\testfolder\")
Do While Len(fileName) > 0
' Insert any action that must be performed on each file.
Debug.Print fileName
' Prints file name to the immediate window
fileName = Dir
' Set the file name to the next file name
Loop
End Sub
Hinweis: Dies ist ein Codeausschnitt und nicht der gesamte Code. Sie können es nach Ihren Wünschen bearbeiten.
Eine schnelle und effiziente Lösung bietet die Funktion Dir
. Darüber hinaus hat es auch eine schnelle Zugriffszeit.
Wenn Sie nur bestimmte Dateien im Ordner durchlaufen möchten, können Sie mit der Funktion Dir
eine test
-Bedingung anwenden. Die Syntax zur Verwendung einer test
-Bedingung mit der Dir
-Funktion ist unten dargestellt.
Dir("C:\User\testfolder\*test*")
Der *test*
kann eine beliebige Bedingung sein, die Sie auf die Dateien anwenden möchten. Zum Beispiel:
- Wenn Sie nur Textdateien im Ordner durchlaufen möchten, verwenden Sie den folgenden Befehl:
Dir("C:\Benutzer\testordner\*.txt")
. - Wenn Sie nur Dateien durchlaufen möchten, deren Namen
"Finance"
enthalten, verwenden Sie den folgenden Befehl:Dir("C:\User\testfolder\*Finance*")
.
Hinweis: Die Argumente der Funktion
Dir
können auch geändert werden, um verschiedene Dateitypen wie versteckt, System usw. zurückzugeben.
Verwenden Sie das File System Object
Die zweite Lösung erstellt ein File System Object
(FSO), um die im Ordner gespeicherten Dateien zu durchlaufen. Verschiedene Funktionalitäten des FSO werden verwendet, um die im Ordner gespeicherten Dateien zu durchlaufen.
Ein Code-Snippet wird unten geteilt.
Sub example()
Dim Obj As Object, Source As Object, file As Variant
Set Obj = CreateObject("Scripting.FileSystemObject")
Set Source = Obj.GetFolder("C:\User\testfolder\")
For Each file In Source.Files
If InStr(file.Name, ".txt") > 0 Then
Debug.Print file.Name
End If
Next file
End Sub
Das Code-Snippet setzt Quelle
mit dem Pfad des spezifischen Ordners. Eine For Each
-Schleife wird dann verwendet, um alle Dateien im Ordner zu durchlaufen.
Wenn Sie nicht alle Dateien im Ordner durchlaufen möchten, können Sie den Befehl InStr(file.name, "test") > 0
verwenden und den Text angeben, um die Dateien herauszufiltern. Wenn die Bedingung true
zurückgibt, werden die Aktionen, die für diese spezifischen Dateien ausgeführt werden müssen, in der if
-Anweisung erwähnt.
Es gibt jedoch ein Problem mit dem oben erwähnten Code-Snippet.
Die Funktion file.name
des Codes hat eine langsame Ausführungszeit. Es dauert einige Sekunden, bis die Antwort an den Benutzer zurückgesendet wird.
Wenn Sie keinen Test verwenden, um die spezifischen Dateien herauszufiltern, benötigen Sie die Funktion file.name
nicht. In diesem Fall würde es ideal funktionieren.
Sie können alle Dateien im Ordner einfach und schnell durch das erwähnte Code-Snippet durchlaufen.
FSO Early Binding vs. Late Binding
Ein File System Object
kann auf zwei Arten deklariert werden – Early Binding und Late Binding.
-
Frühe Bindung
Frühes Binden ist, wenn die Referenzlinks – die Bibliotheken – explizit in VBA überprüft oder hinzugefügt werden. Die Bibliotheken können über
Extras
>Referenzen
in VBA hinzugefügt werden.Die Ausführung schlägt fehl, wenn das Modul auf Ihrem Computer nicht verfügbar ist. Die frühe Bindung ist für den Entwicklungs- und Debugging-Prozess sehr nützlich.
Es bietet dem Intellisense-Editor Vorschläge für Objektmethoden, Eigenschaften und benannte Konstanten. Außerdem ist es schneller als spätes Binden.
Überprüfen Sie in der frühen Bindung die Module/Bibliotheken, die Sie benötigen, und deklarieren Sie Objekte auf die folgende Weise.
Dim FSO As FileSystemObject Set FSO = New FileSystemObject
Eine andere Methode zum Deklarieren von Objekten in Early Binding ist wie folgt:
Dim FSO As New FileSystemObject
-
Späte Bindung
Externe Bibliotheken werden bei der späten Bindung nicht eingebunden. Es ist unabhängig von Referenzverbindungen, was es ideal für Portierbarkeit und Kompatibilität zwischen Maschinen macht.
Es bietet keinen Intellisense-Editor, daher müssen die objektspezifischen Konstanten explizit deklariert und durch ihren Wert bereitgestellt werden.
Die folgende Syntax kann verwendet werden, um ein Objekt in später Bindung zu deklarieren.
Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject")
Die bessere Lösung
Die Lösung mit der Funktion Dir
funktioniert besser als die Lösung, die Objekte erstellt, um Dateien aus dem Ordner zu holen. Die Testfähigkeit mit der Dir
-Funktion arbeitet effizienter als die Lösung, die Objekte für den Zugriff auf Dateien erstellt.
Sie können Makros erstellen, die Ihre erforderliche Funktionalität speichern und ausführen. Mithilfe von Makros in Microsoft Office können Sie dieselbe Funktionalität über verschiedene Ordner ausführen.
Abschluss
Microsoft Office-Anwendungen bieten zahlreiche Funktionen für ihre Benutzer. Mit der Programmierung in der VBA-Sprache wurde es für Benutzer einfacher, automatisierte Aufgaben mit nur wenigen Codezeilen zu erledigen.
Es gibt mehrere Lösungen, um die Dateien in einem bestimmten Ordner zu durchlaufen, also erkunden Sie weiter.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub