Dateisystemobjekt in VBA

Iqra Hasnain 15 Februar 2024
  1. Dateisystemobjekt in VBA
  2. FileSystemObject Erstellung in VBA
Dateisystemobjekt in VBA

Wir werden File System Object in VBA mit Beispielen vorstellen.

Dateisystemobjekt in VBA

Das FileSystemObject (FSO) bietet eine Vielzahl von Operationen für den Zugriff auf das Dateisystem des eigenen Laptops. Dieses Objekt ermöglicht es uns, schnell auf Dateien, Verzeichnisse und Laufwerke zuzugreifen und diese zu lesen und zu schreiben.

Das BFS arbeitet nach weltweiten Standards und Systemeinstellungen. Wenn wir die Excel-Anwendung international teilen, kümmert sich das FSO um alle Unterschiede in den Einstellungen zwischen den Ländern, die der eigene Code möglicherweise nicht bewältigen kann.

Das FSO wird es uns ermöglichen, praktisch alles, was es im Windows-Datei-Explorer tun kann, in VBA-Code zu erreichen. Tatsächlich bietet es die volle Kontrolle über das Windows-Dateisystem.

FileSystemObject Erstellung in VBA

Excel VBA enthält das FileSystemObject nicht. Vielleicht könnten wir FSO in VBA verwenden, indem wir ein Objekt mit später Bindung erstellen.

Code:

# vba
Sub CreateFileSysObj()

Set MyFileSysObj = CreateFileSysObj("Scripting.FileSystemObject")

End Sub

Wir können auch einen Verweis auf die FSO-Bibliothek in VBA einfügen. Die frühe Bindung ist schneller als die späte Bindung, da das Objekt nicht generiert werden muss, wenn der Code ausgeführt wird.

Um einen Link hinzuzufügen, öffnen Sie den Visual Basic Editor (VBE) durch Drücken von Alt-F11 und wählen Sie dann im VBE-Menü 'Tools|References'. Dies kann ein Popup-Fenster öffnen, in dem wir die entsprechende Referenz auswählen können.

Scrollen Sie nach unten, bis wir in der Spalte der zugänglichen Referenzen 'the Microsoft Scripting Runtime' finden. Aktivieren Sie das Kontrollkästchen und klicken Sie auf OK, um die Bibliothek in die Anwendung aufzunehmen.

Die DLL-Bibliotheksdatei befindet sich auf C:Windows\SysWOW64\scrrun.dll.

Wenn wir das Programm an andere Kollegen oder Orte senden, vergewissern Sie sich, dass sie diese Datei an der richtigen Stelle auf ihrem PC haben, sonst schlägt der Code fehl. Es wird empfohlen, den Befehl Dir zu verwenden, um zu überprüfen, ob die Datei in einer Fehlerfalle beim Ereignis WorkbookOpen vorhanden ist.

Wenn es fehlt, zeigen Sie eine Meldung an und beenden Sie die Excel-Datei. Nachdem wir die Referenz eingefügt haben, können wir das FSO mit dem folgenden Code generieren.

Code:

# vba
Sub TestFileSysObj()

Dim MyFileSysObj As New FileSystemObject

End Sub

Der folgende Code bestimmt, ob der Ordner mit dem Namen 'Test' (an dem bestimmten Ort) existiert oder nicht. Wenn der Ordner vorhanden ist, ist die IF-Bedingung True und das Meldungsfeld zeigt 'The Folder Exists.' an. Wenn er nicht existiert, erscheint der Text 'The Folder Does Not Exist'.

Code:

# vba
Sub FolderExistCheck()
Set MyFileSysObj = CreateObject("Scripting.FileSystemObject")

If MyFileSysObj.FolderExists("D:\Test") Then
    MsgBox"This Folder Exists"
Else
    MsgBox"This Folder Doest Not Exists"
End If
End Sub

Ausgang:

Verwenden des Dateisystemobjekts zum Überprüfen, ob der Ordner in VBA vorhanden ist oder nicht

Ebenso können wir feststellen, ob eine Datei existiert oder nicht. Der folgende Code bestimmt, ob eine Datei mit dem Namen Test.xlsx im bereitgestellten Ordner vorhanden ist oder nicht.

Code:

# VBA
Sub CheckFileExist()
Set MyFileSysObj = CreateObject("Scripting.FileSystemObject")

If MyFileSysObj.FileExists("D:\Test\Test.xlsx") Then
    MsgBox "This File Exists In Folder"
Else
    MsgBox "This File Does Not Exist In Folder"
End If
End Sub

Ausgang:

Verwenden des Dateisystemobjekts zum Überprüfen der Datei in einem Ordner in VBA

Der folgende Code erstellt einen Ordner namens 'Test' auf der C-Disc unseres Systems (wir müssen den Pfad auf unserem Computer angeben, in dem wir den Ordner erstellen möchten).

Code:

# vba
Sub CreateNewFolder()
Set MyFileSysObj = CreateObject("Scripting.FileSystemObject")
MyFileSysObj.CreateFolder("D:\Test")
End Sub

Ausgang:

Verwenden des Dateisystemobjekts zum Erstellen eines neuen Ordners in VBA

Obwohl dieser Code gut funktioniert, löst er eine Ausnahme aus, wenn der Ordner bereits vorhanden ist. Der folgende Code überprüft, ob der Ordner bereits vorhanden ist, und erstellt ihn falls nicht.

Es zeigt eine Benachrichtigung an, wenn der Ordner bereits vorhanden ist. Wir haben die Folder Exists-Methode des FSO verwendet, um festzustellen, ob der Ordner existiert.

Code:

# vba
Sub CreateNewFolder()
Set MyFileSysObj = CreateObject("Scripting.FileSystemObject")
If MyFileSysObj.CreateFolder("D:\Test") Then
    MsgBox "This Folder Exists Already"
Else
    MyFileSysObj.CreateNewFolder("D:\Test")
End If
End Sub

Ausgang:

Verwenden des Dateisystemobjekts zum Erstellen eines neuen Ordners in VBA

Der folgende Code kopiert alle Dateien aus dem Stammordner in den angegebenen Ordner.

Code:

# vba
Sub FetchFileName()
Set MyFileSysObj = CreateObject("Scripting.FileSystemObject")
Dim FileInFolder
Dim SysFolder

Set SysFolder = MyFileSysObj.GetFolder("D:\Test")

For Each FileInFolder In SysFolder.Files
    Debug.Print FileInFolder.Name
Next FileInFolder

End Sub

Ausgang:

Überprüfen von Dateinamen aus Ordnern mit Dateisystemobjekt in VBA

Dieses Beispiel ist komplexer als die zuvor besprochenen. Wenn wir uns auf die Microsoft Scripting Runtime Library beziehen, können wir FileSystemObject und alle anderen Datei- und Ordnerobjekte verwenden.

Wie im obigen Beispiel erwähnt, haben wir drei Objekte verwendet – FileSystemObject, File und Folder. Dadurch können wir jede Datei im erforderlichen Ordner durchgehen, und wir verwenden die Name-Eigenschaft, um die Liste aller Dateinamen zu erhalten.

Beachten Sie, dass wir Debug.Print verwenden, um die Namen aller Dateien zu erhalten. Gehen wir zu einem anderen Beispiel, in dem wir die Namen aller Unterordner im erforderlichen Ordner angeben.

Die Idee ist die gleiche wie in den obigen Beispielen diskutiert. Anstelle von Dateien verwenden wir in diesen Beispielen die Unterordner.

Code:

# vba
Sub FetchSubFolder()
Set MyFileSysObj = CreateObject("Scripting.FileSystemObject")
Dim FileInFolder
Dim SysFolder
Dim SysSubFolder

Set SysFolder = MyFileSysObj.GetFolder("D:\Test")

For Each SysSubFolder In SysFolder.SubFolders
    Debug.Print SysSubFolder.Name
Next SysSubFolder

End Sub

Ausgang:

Überprüfen der Unterordnernamen aus dem Ordner mithilfe des Dateisystemobjekts in VBA

Lassen Sie uns ein weiteres Beispiel besprechen, in dem wir Dateien überschreiben, wie unten gezeigt.

Code:

# vba
Sub CopyFiles()
Set MyFileSysObj = CreateObject("Scripting.FileSystemObject")
Dim SysFile
Dim SrcFolder
Dim FinalFolder
Dim SysFolder
Dim SysSubFolder

SrcFolder = "D:\Test\Src"
FinalFolder = "D:\Test\Dst"

Set SysFolder = MyFileSysObj.GetFolder(SrcFolder)

For Each SysFile In SysFolder.Files
    MyFileSysObj.CopyFile Source:=MyFileSysObj.GetFile(SysFile), _
    Destination:=FinalFolder & "\" & SysFile.Name, Overwritefiles:=False
Next SysFile

End Sub

Ausgang:

Src-Ordner:

src-Ordner zum Übertragen von Dateien von src nach dst mithilfe des Dateisystemobjekts in VBA

Dst-Ordner:

dst-Ordner nach dem Übertragen von Dateien von src nach dst mithilfe des Dateisystemobjekts in VBA

Beachten Sie, dass wir die Eigenschaft Overwritefiles in der Funktion MyFileSysObj.CopyFile auf False setzen (dies ist standardmäßig wahr). Dadurch wird sichergestellt, dass die Datei nicht dupliziert wird, wenn sie bereits im Ordner vorhanden ist (und wir werden einen Fehler beobachten).

Wenn wir dies auf True setzen oder Overwritefiles löschen, werden möglicherweise alle Dateien im letzten Ordner mit dem genauen Namen überschrieben. Beim Übertragen von Dateien besteht immer die Gefahr, dass diese überschrieben werden.

In diesem Szenario empfiehlt es sich, den Zeitstempel neben dem Namen anzugeben. Dadurch ist sichergestellt, dass die Dateinamen immer eindeutig sind und wir nachvollziehen können, welche Dateien wann kopiert wurden.

Wenn wir nur Dateien mit einer bestimmten Erweiterung replizieren möchten, verwenden Sie eine IF and Then-Anweisung, um zu testen, ob die Erweiterung von einer Microsoft-Tabellenkalkulations-Excel-Datei stammt oder nicht.

Code:

# vba
Sub CopyXlFiles()
Set MyFileSysObj = CreateObject("Scripting.FileSystemObject")
Dim SysFile
Dim SrcFolder
Dim FinalFolder
Dim SysFolder
Dim SysSubFolder

SrcFolder = "D:\Src"
FinalFolder = "D:\Dst"

Set SysFolder = MyFileSysObj.GetFolder(SRCFolder)

For Each SysFile In SysFolder.Files
    If MyFileSysObj.GetExtensionName(SysFile) = "xlsx" Then
        MyFileSysObj.CopyFile Source:=MyFileSysObj.GetFile(SysFile), _
    Destination:=FinalFolder & "\" & SysFile.Name, Overwritefiles:=False
    End If
Next SysFile

End Sub