FileSystemObject, ook wel FSO genoemd, biedt een eenvoudig object-gebaseerd model om toegang te krijgen tot het bestandssysteem van een computer. Je hoeft alleen maar een instantie van FileSystemObject in VBA te maken en dan kun je bestanden genereren, bestanden lezen, bestanden verwijderen, door mappen bladeren en vele andere bewerkingen op het bestandssysteem van je computer uitvoeren.
Het FileSystemObject is aanwezig in de Microsoft Scripting Runtime Library, d.w.z. Scrrun.dll
. Deze DLL ondersteunt de creatie en manipulatie van bestanden met behulp van TextStream object en dit is de reden waarom FSO geen operatie op binaire bestanden ondersteunt.
Inhoudsopgave
Toepassingen van het File System Object
FileSystemObject kan worden gebruikt voor verschillende taken zoals:
- Creëren, openen, lezen, schrijven en verwijderen van tekstbestanden.
- Mappen maken, wijzigen en verwijderen.
- Bestanden en mappen itereren.
- Bestanden of mappen kopiëren en verplaatsen.
- Controleren of een locatie (bestandspad) bestaat of niet.
Toegang tot FileSystemObject
Het FileSystemObject bestaat uit verschillende objectverzamelingen en elk van deze objectverzamelingen bevat informatie over een specifiek aspect van het bestandssysteem. Deze verzamelingen zijn:
Object | Description |
---|---|
Drive | Met dit object kunt u informatie opvragen over een drive die aan uw systeem is gekoppeld. Het kan u bijvoorbeeld vertellen hoeveel ruimte er beschikbaar is in een schijf, de logische naam, enz. Merk op dat het drive-object waarnaar we hier verwijzen niet noodzakelijkerwijs de harde schijf betekent, het kan een CD-ROM, Flash drive, RAM, of zelfs een logisch verbonden drive via LAN zijn. |
Map | Met dit object kunt u een mappenhiërarchie maken, verwijderen, verplaatsen of opvragen. |
Bestand | Met dit object kunt u een Bestand maken, verwijderen, verplaatsen of opvragen. |
TextStream | TextStream-object maakt het mogelijk om tekstbestanden te lezen of te schrijven. |
Dus, schematisch kan een FileSystemObject worden weergegeven als:
Merk op dat FSO met de meeste van de bovenstaande objecten indirect communiceert. Het bevat alleen rechtstreeks de objectverzameling voor “Aandrijvingen”. Elk “Drive”-object in de “Drives”-verzameling bevat een keten van “Folder”-objecten. En elk “Folder” object bevat een “File” collectie.
Om het wat zinvoller te maken, laten we het zo zeggen: Een FileSystemObject bevat drie hoofdmethoden voor het ophalen (lezen) van specifieke informatie over Drives, Folders, of Bestanden, deze methoden zijn GetDrive
, GetFolder
en GetFile
respectievelijk. Stel nu dat u de bestandsgrootte van een bepaald bestand wilt vinden, dan maakt u een instantie van de GetFile
methode en haalt dan de size
eigenschap op.
Note: GetDrive
, GetFolder
en GetFile
zijn niet de enige methoden binnen FSO, ik heb ze alleen gebruikt om dingen uit te leggen. In de volgende sectie zullen we alle methoden binnen FileSystemObject zien.
FSO-methoden
De onderstaande tabel geeft details over verschillende FileObjectSystem methoden en de taken die zij uitvoeren:
Method | Description |
---|---|
GetDrive, GetFolder, and GetFile | Deze methoden worden gebruikt voor het ophalen van informatie over respectievelijk Drive, Folders en Files. |
CreateFolder en CreateTextFile | Helpt bij het maken van nieuwe mappen of bestanden. |
DeleteFile en DeleteFolder | Helpt bij het verwijderen van bestaande bestanden of mappen. |
CopyFile en CopyFolder | Deze methoden helpen bij het kopiëren van bestanden of mappen van de ene locatie naar de andere. |
MoveFile en MoveFolder | Deze methodes helpen bij het verplaatsen van bestanden of mappen van de ene locatie naar de andere. |
Een FileSystemObject in VBA maken: In dit gedeelte zullen we twee dingen behandelen:
- Een verwijzing maken naar Microsoft Scripting Runtime Library, d.w.z. Scrrun.dll
- Een FSO-object maken.
Een verwijzing maken naar Microsoft Scripting Runtime Library
Voor het maken van een verwijzing naar Microsoft Scripting Runtime Library volgt u de onderstaande stappen:
- Open eerst de VBA-editor door op “Alt + F11” te drukken.
- Navolgend navigeert u naar “Hulpmiddelen” > “Referentie”, zoals hierboven is weergegeven.
- Hiermee opent u een referentie-venster. Selecteer hier het item “Microsoft Scripting Runtime” en klik op “OK”.
- Nu is de verwijzing naar Microsoft Scripting Runtime Library toegevoegd.
Een FSO-object maken
Een FSO-object maken is eenvoudig, volg de onderstaande stappen om dit te doen:
- Navigeer in de VBA-editor naar “Invoegen” > “Module”.
- Nu typt u in het modulevenster “
Public FSO As New FileSystemObject
“. - Dit maakt een object van FileSystemObject met de naam FSO.
Na dit kunt u eenvoudig toegang krijgen tot de methoden van het FileSystemObject met behulp van het FSO-object.
6 Praktische voorbeelden van toegang tot FileSystemObject
Nu gaan we over naar enkele praktische voorbeelden van FSO:
Voorbeeld 1: Gebruik FSO om de totale vrije ruimte van een schijf te vinden.
Hieronder staat de code om dit te doen:
'Een FileSystemObject maken
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'De drive aanmaken
object Space = drv.FreeSpace
Space = Space / 1073741824 'bytes omrekenen naar GB
Space = WorksheetFunction.Round(Space, 2) 'Afronden
MsgBox "C: heeft vrije ruimte = " & Space & " GB"
End Sub
Explanation: In deze code hebben we eerst een schijfobject gemaakt met behulp van de methode ‘GetDrive
‘ en vervolgens hebben we de eigenschap ‘
FreeSpace
‘ gebruikt om de vrije ruimte op te halen.
Tot slot hebben we de vrije ruimte weergegeven met behulp van een berichtvenster.
Merk op dat er twee eigenschappen zijn om de vrije ruimte van een schijf op te halen, namelijk drv.FreeSpace
en drv.AvailableSpace
.
Voorbeeld 2: Controleer of een map bestaat of niet. Als de map niet bestaat, maak dan die map.
Hieronder staat de code:
'Een FileSystemObject maken
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Voer het pad in van de te controleren map :")
If Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Dan
MsgBox "Map bestaat!"
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Map aangemaakt!")
End If Else MsgBox "Verkeerde invoer"
End If
End Sub
Uitleg: In de code hebben we een InputBox-functie gebruikt om het pad van de map van de gebruiker te krijgen. Daarna hebben we met behulp van de verklaring If samen met FolderExists
de methode gecontroleerd of de map aanwezig is of niet. Als de map niet aanwezig is, maken we die map aan met de CreateFolder
methode.
Note: CreateFolder
de methode maakt slechts één map tegelijk aan. Dus, als je het argument “C:Map1Map2Map3” opgeeft, dan wordt alleen Map3 aangemaakt in Map2. Maar als Folder2 niet bestaat, dan zal het een path not found error geven.
Voorbeeld 3: Schrijf een code met FSO om een map van de ene plaats naar de andere te kopiëren.
Hieronder volgt de code om dit te bereiken:
‘Het maken van een FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder “C:\Bron-Folder”, “D:\Destination-Folder”, True MsgBox “Het kopiëren is klaar!” End Sub
Uitleg: In de code hebben we de CopyFolder
methode van FSO gebruikt, deze methode accepteert drie argumenten:
- Bronpad
- Bestemmingspad
- Een Booleaans argument om Overschrijven Bestaand te specificeren.
Voorbeeld 4: Met behulp van FileSystemObject de map Temp, Systeemmap, en Windows map ophalen.
Om dit te doen kunnen we de volgende code gebruiken:
'Een FileSystemObject maken
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-mappad = " & Windows_Fldr & vbNewLine & _ "System-mappad = " & System_Fldr & vbNewLine & _ "Temp-mappad = " & Temp_Fldr)
End Sub
Explanation: In de code hebben we de GetSpecialFolder
methode van FSO gebruikt, deze methode accepteert een enkel numeriek argument, d.w.z. 0-2.
-
FSO.GetSpecialFolder(0)
– Haalt het pad op van Windows Map. -
FSO.GetSpecialFolder(1)
– Haalt het pad op van Systeem Map. -
FSO.GetSpecialFolder(2)
– Hiermee wordt het pad opgezocht naar de lokale tijdelijke map.
Exemplaar 5: Maak een tekstbestand, schrijf er wat inhoud in, lees vervolgens het bestand, en verwijder tenslotte het bestand.
Hieronder staat de code om dit te bereiken:
'Een bestandssysteemobject maken Publiceer
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" 'Bestand dat moet worden gemaakt
'Een bestand maken en er inhoud naar schrijven
FileContent = InputBox("Voer de bestandsinhoud in")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Lezen uit het bestand dat we zojuist hebben gemaakt
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Eindelijk het bestand verwijderen
File.Delete (True)
End If
End Sub
Uitleg: Deze code maakt eerst een tekstbestand, voegt er inhoud aan toe, leest het vervolgens, geeft het weer met behulp van een berichtenvenster en verwijdert ten slotte dat bestand.
Voorbeeld 6: Schrijf een VBA-code die alle bestanden in een map kan doorlopen en ook hun grootte en wijzigingsdatum kan ophalen.
De volgende code kan deze taak volbrengen:
'Een FileSystemObject maken
Public FSO As New FileSystemObject
Sub ListFiles()
'Variabelen declareren
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Het pad van de map specificeren
strPath = "C:
'Maak het object van deze map
Set objFolder = FSO.GetFolder(strPath)
'Controleer of de map leeg is of niet
If objFolder.Files.Count = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Toevoegen van kolomnamen voor A, B, en C
Cells(1, "A").Value = "File Name"
Cells(1, "B").Value = "Size"
Cells(1, "C").Value = "Modified Date/Time"
'Zoek de volgende beschikbare rij
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Loop door elk bestand in de map
For Each objFile In objFolder.Files
'Maak een lijst van de naam, grootte en datum/tijd van het huidige bestand
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Zoek de volgende rij NextRow = NextRow + 1
Next objFile
End Sub