FileSystemObject, auch FSO genannt, bietet ein einfaches objektbasiertes Modell für den Zugriff auf das Dateisystem eines Computers. Sie müssen einfach eine Instanz von FileSystemObject in VBA erstellen und können dann Dateien erzeugen, Dateien lesen, Dateien löschen, Ordner durchlaufen und viele andere Operationen auf dem Dateisystem Ihres Computers durchführen.
Das FileSystemObject befindet sich in der Microsoft Scripting Runtime Library, d.h. Scrrun.dll
. Diese DLL unterstützt die Erstellung und Manipulation von Dateien mit TextStream-Objekt und dies ist der Grund, warum FSO nicht unterstützt Betrieb auf binäre Dateien.
Inhaltsverzeichnis
Verwendung von File System Object
FileSystemObject kann für mehrere Aufgaben verwendet werden, wie zum Beispiel:
- Erstellen, Öffnen, Lesen, Schreiben und Löschen von Textdateien.
- Anlegen, Ändern und Löschen von Ordnern.
- Interieren von Dateien und Ordnern.
- Kopieren und Verschieben von Dateien oder Ordnern.
- Prüfen, ob ein Speicherort (Dateipfad) existiert oder nicht.
Zugriff auf FileSystemObject
Das FileSystemObject umfasst mehrere Objektsammlungen und jede dieser Objektsammlungen enthält Informationen über einen bestimmten Aspekt des Dateisystems. Diese Sammlungen sind:
Objekt | Beschreibung |
---|---|
Laufwerk | Mit diesem Objekt können Sie Informationen über ein an Ihr System angeschlossenes Laufwerk erhalten. Es kann Ihnen zum Beispiel den verfügbaren Speicherplatz auf einem Laufwerk, seinen logischen Namen usw. mitteilen. Beachten Sie, dass das Laufwerksobjekt, auf das wir uns hier beziehen, nicht notwendigerweise die Festplatte bedeutet, es kann eine CD-ROM, ein Flash-Laufwerk, RAM oder sogar ein logisch verbundenes Laufwerk über LAN sein. |
Ordner | Mit diesem Objekt können Sie eine Ordnerhierarchie erstellen, löschen, verschieben oder abfragen. |
Datei | Mit diesem Objekt können Sie eine Datei erstellen, löschen, verschieben oder abfragen. |
TextStream | Das TextStream-Objekt ermöglicht das Lesen oder Schreiben von Textdateien. |
Diagrammatisch kann ein FileSystemObject also wie folgt dargestellt werden:
Bitte beachten Sie, dass FSO mit den meisten der oben genannten Objekte indirekt kommuniziert. Es enthält nur direkt die Objektsammlung für „Laufwerke“. Jedes „Drive“-Objekt in der „Drives“-Sammlung enthält eine Kette von „Folder“-Objekten. Und jedes „Folder“-Objekt enthält eine „File“-Sammlung.
Um es aussagekräftiger zu machen, können wir es so formulieren: Ein FileSystemObject enthält drei Hauptmethoden, um spezifische Informationen über Laufwerke, Ordner oder Dateien zu holen (zu lesen), diese Methoden sind GetDrive
, GetFolder
bzw. GetFile
. Nehmen wir an, Sie müssen die Dateigröße einer bestimmten Datei herausfinden, dann erstellen Sie eine Instanz der GetFile
Methode und rufen dann deren size
Eigenschaft ab.
Hinweis: GetDrive
, GetFolder
und GetFile
sind nicht die einzigen Methoden innerhalb von FSO, ich habe sie nur zur Erklärung verwendet. Im folgenden Abschnitt werden wir alle Methoden sehen, die im FileSystemObject enthalten sind.
FSO-Methoden
Die folgende Tabelle enthält Einzelheiten über verschiedene FileObjectSystem-Methoden und die Aufgaben, die sie erfüllen:
Methode | Beschreibung |
---|---|
GetDrive, GetFolder und GetFile | Diese Methoden werden zum Abrufen von Informationen über Laufwerk, Ordner bzw. Dateien verwendet. |
CreateFolder und CreateTextFile | Hilft beim Erstellen von neuen Ordnern oder Dateien. |
DeleteFile und DeleteFolder | Hilft beim Löschen von vorhandenen Dateien oder Ordnern. |
CopyFile und CopyFolder | Diese Methoden helfen beim Kopieren von Dateien oder Ordnern von einem Ort zum anderen. |
MoveFile und MoveFolder | Diese Methoden helfen beim Verschieben von Dateien oder Ordnern von einem Ort zum anderen. |
Erstellen eines FileSystemObjects in VBA: In diesem Abschnitt werden wir uns mit zwei Dingen beschäftigen:
- Erstellen eines Verweises auf die Microsoft Scripting Runtime Library, d.h. Scrrun.dll
- Erstellen eines FSO-Objekts.
Erstellen eines Verweises auf die Microsoft Scripting Runtime Library
Um einen Verweis auf die Microsoft Scripting Runtime Library zu erstellen, gehen Sie wie folgt vor:
- Zuallererst öffnen Sie den VBA-Editor, indem Sie „Alt + F11“ drücken.
- Nächstes navigieren Sie zu „Tools“ > „Reference“ wie oben gezeigt.
- Dadurch öffnet sich ein Referenzfenster. Wählen Sie hier den Eintrag „Microsoft Scripting Runtime“ aus, markieren Sie ihn und klicken Sie auf „OK“.
- Jetzt ist der Verweis auf die Microsoft Scripting Runtime Library hinzugefügt.
Erstellen eines FSO-Objekts
Das Erstellen eines FSO-Objekts ist einfach, gehen Sie dazu wie folgt vor:
- Navigieren Sie im VBA-Editor zu „Einfügen“ > „Modul“.
- Nun geben Sie im Modulfenster „
Public FSO As New FileSystemObject
“ ein. - Damit wird ein Objekt von FileSystemObject mit dem Namen FSO erstellt.
Danach können Sie einfach über das FSO-Objekt auf die Methoden des FileSystemObject zugreifen.
6 Praktische Beispiele für den Zugriff auf FileSystemObject
Wenden wir uns nun einigen praktischen Beispielen für FSO zu:
Beispiel 1: Verwenden Sie FSO, um den gesamten freien Speicherplatz eines Laufwerks zu ermitteln.
Nachfolgend der Code dazu:
'Erstellen eines FileSystemObjects
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Anlegen des Laufwerks
Objekts Space = drv.FreeSpace
Space = Space / 1073741824 'Umrechnung von Bytes in GB
Space = WorksheetFunction.Round(Space, 2) 'Rundung
MsgBox "C: hat freien Speicherplatz = " & Space & " GB"
End Sub
Erläuterung: In diesem Code haben wir zuerst ein Laufwerksobjekt mit der Methode ‚GetDrive
‚ erstellt und dann seine Eigenschaft ‚
FreeSpace
‚ verwendet, um den freien Speicherplatz abzurufen.
Schließlich haben wir den freien Speicherplatz mit einem Meldungsfeld angezeigt.
Beachten Sie, dass es zwei Eigenschaften gibt, um den freien Speicherplatz eines Laufwerks abzurufen, nämlich drv.FreeSpace
und drv.AvailableSpace
.
Beispiel 2: Prüfen Sie, ob ein Ordner vorhanden ist oder nicht. Wenn der Ordner nicht vorhanden ist, erstellen Sie ihn.
Nachfolgend der Code:
'Erstellen eines FileSystemObjects
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Geben Sie den Pfad des zu prüfenden Ordners ein :")
If Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Then
MsgBox "Folder Exists!"
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Folder Created!")
End If Else MsgBox "Wrong Input"
End If
End Sub
Erklärung: Im Code haben wir eine InputBox-Funktion verwendet, um den Pfad des Ordners vom Benutzer zu erhalten. Danach haben wir mit der If-Anweisung zusammen mit FolderExists
der Methode geprüft, ob der Ordner vorhanden ist oder nicht. Wenn der Ordner nicht vorhanden ist, erstellen wir den Ordner mit der CreateFolder
Methode.
Hinweis: Die CreateFolder
Methode erstellt immer nur einen einzigen Ordner auf einmal. Wenn Sie also das Argument „C:\Ordner1\Ordner2\Ordner3“ angeben, wird nur der Ordner3 innerhalb von Ordner2 erstellt. Aber wenn Ordner2 nicht existiert, wird ein Fehler „Pfad nicht gefunden“ ausgegeben.
Beispiel 3: Schreiben Sie einen Code mit BFS, um einen Ordner von einem Ort zu einem anderen zu kopieren.
Nachfolgend der Code, um dies zu erreichen:
‚Erstellen eines FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder „C:\Quell-Ordner\“, „D:\Ziel-Ordner\“, True MsgBox „Copy Done!“ End Sub
Erläuterung: Im Code haben wir die CopyFolder
Methode von FSO verwendet, diese Methode akzeptiert drei Argumente:
- Quellpfad
- Zielpfad
- Ein boolesches Argument, um Overwrite Existing anzugeben.
Beispiel 4: Mit FileSystemObject das Temp-Verzeichnis, den Systemordner und den Windows-Ordner holen.
Dazu können wir den folgenden Code verwenden:
'Erstellen eines FileSystemObjects
Public FSO As New FileSystemObject
Sub GetFolderpath()
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
Windows_Fldr = FSO.GetSpecialFolder(0)
System_Fldr = FSO.GetSpecialFolder(1)
Temp_Fldr = FSO.GetSpecialFolder(2)
MsgBox ("Windows folder path = " & Windows_Fldr & vbNewLine & _ "System folder path = " & System_Fldr & vbNewLine & _ "Temp folder path = " & Temp_Fldr)
End Sub
Erläuterung: Im Code haben wir die GetSpecialFolder
Methode von FSO verwendet, diese Methode akzeptiert ein einzelnes numerisches Argument, d.h. 0-2.
-
FSO.GetSpecialFolder(0)
– Holt den Pfad des Windows-Ordners. -
FSO.GetSpecialFolder(1)
– Holt den Pfad des Systemordners. -
FSO.GetSpecialFolder(2)
– Ruft den Pfad des lokalen temporären Ordners ab.
Beispiel 5: Erstellen einer Textdatei, Schreiben eines Inhalts in die Datei, anschließendes Lesen der Datei und schließlich Löschen der Datei.
Nachfolgend finden Sie den Code, um dies zu erreichen:
'Erstellen eines FileSystemObject Public
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
FileName = "C:\TestDirectory\File.txt" 'Zu erstellende Datei
'Erstellen einer Datei und Schreiben des Inhalts in diese
DateiInhalt = InputBox("Geben Sie den Dateiinhalt ein")
If Len(DateiInhalt) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Lesen aus der Datei, die wir gerade erstellt haben
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Schließlich Löschen der Datei
File.Delete (True)
End If
End Sub
Erläuterung: Dieser Code erstellt zunächst eine Textdatei, fügt ihr Inhalt hinzu, liest sie dann, zeigt sie in einem Meldungsfeld an und löscht schließlich die Datei.
Beispiel 6: Schreiben Sie einen VBA-Code, der alle Dateien in einem Ordner durchläuft und auch ihre Größe und ihr Änderungsdatum abfragt.
Der folgende Code kann diese Aufgabe erfüllen:
'Erstellen eines FileSystemObjects
Public FSO As New FileSystemObject
Sub ListFiles()
'Deklarieren von Variablen
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Geben Sie den Pfad des Ordners an
strPath = "C:\Benutzer\Aniee\Desktop\ExcelTrick\ "
'Erstellen Sie das Objekt dieses Ordners
Set objFolder = FSO.GetFolder(strPath)
'Prüfen, ob der Ordner leer ist oder nicht
If objFolder.Files.Count = 0 Then
MsgBox "Es wurden keine Dateien gefunden...", vbExclamation
Exit Sub
End If
'Spaltennamen für A, B, und C hinzufügen
Cells(1, "A").Value = "File Name"
Cells(1, "B").Value = "Size"
Cells(1, "C").Value = "Modified Date/Time"
'Die nächste verfügbare Zeile finden
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Schleife durch jede Datei im Ordner
For Each objFile In objFolder.Files
'Name, Größe und Datum/Uhrzeit der aktuellen Datei auflisten
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Die nächste Zeile finden NextRow = NextRow + 1
Next objFile
End Sub