Durchlaufen Sie Dateien in einem Ordner mit VBA

Bilal Shahid 21 Juni 2023
  1. Durchlaufen Sie Dateien in einem Ordner mit VBA
  2. Verwenden Sie die Dir-Funktion
  3. Verwenden Sie das File System Object
  4. Die bessere Lösung
  5. Abschluss
Durchlaufen Sie Dateien in einem Ordner mit VBA

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:

  1. Wenn Sie nur Textdateien im Ordner durchlaufen möchten, verwenden Sie den folgenden Befehl: Dir("C:\Benutzer\testordner\*.txt").
  2. 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.

  1. 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
    
  2. 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.

Bilal Shahid avatar Bilal Shahid avatar

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

Verwandter Artikel - VBA File