FileSystemObject i VBA – Forklaret

FileSystemObject, også kaldet FSO, giver en nem objektbaseret model til at få adgang til en computers filsystem. Du skal blot oprette en instans af FileSystemObject i VBA, og derefter kan du generere filer, læse filer, slette filer, iterere gennem mapper og udføre mange andre operationer på computerens filsystem.

FileSystemObject er til stede inde i Microsoft Scripting Runtime Library dvs. Scrrun.dll. Denne DLL understøtter oprettelse og manipulation af filer ved hjælp af TextStream-objektet, og det er grunden til, at FSO ikke understøtter operation på binære filer.

Indholdsfortegnelse

Anvendelse af File System Object

FileSystemObject kan bruges til flere opgaver, f.eks.:

  • Opretning, åbning, læsning, skrivning og sletning af tekstfiler.
  • Opretning, ændring og sletning af mapper.
  • Iteration af filer og mapper.
  • Kopiering og flytning af filer eller mapper.
  • Kontrol af, om en placering (filsti) findes eller ej.

Adgang til FileSystemObject

FileSystemObject består af flere objektsamlinger, og hver af disse objektsamlinger indeholder oplysninger om et bestemt aspekt af filsystemet. Disse samlinger er:

Object Description
Drive Dette objekt giver dig mulighed for at få oplysninger om et drev, der er tilsluttet til dit system. Det kan f.eks. fortælle dig, hvor meget plads der er til rådighed på et drev, dets logiske navn osv. Bemærk, at det drevobjekt, som vi henviser til her, ikke nødvendigvis betyder harddisken, det kan være en cd-rom, et flashdrev, et RAM-drev eller endda et logisk forbundet drev via LAN.
Mappe Dette objekt giver dig mulighed for at oprette, slette, flytte eller forespørge et mappehierarki.
Fil Dette objekt giver dig mulighed for at oprette, slette, flytte eller forespørge en fil.
TextStream TextStream-objektet giver dig mulighed for at læse eller skrive tekstfiler.

Så diagrammatisk kan et FileSystemObject vises som:

Bemærk, at FSO kommunikerer indirekte med de fleste af ovenstående objekter. Den indeholder blot direkte objektsamlingen for “Drives”. Hvert “Drive”-objekt i “Drives”-samlingen indeholder en kæde af “Folder”-objekter. Og hvert “Mappe”-objekt indeholder en “Fil”-samling.

For at gøre det mere meningsfuldt, kan vi sige det på denne måde: En FileSystemObject indeholder tre hovedmetoder til at hente (læse) specifikke oplysninger om drev, mapper eller filer, disse metoder er GetDrive, GetFolder og GetFile respektivt. Lad os nu sige, at du har brug for at finde filstørrelsen på en bestemt fil, så opretter du en instans af GetFile metoden og henter derefter dens size egenskab.

Bemærk: GetDrive, GetFolder og GetFile er ikke de eneste metoder i FSO, jeg har bare brugt dem for at forklare tingene. I nedenstående afsnit vil vi se alle de metoder, der er indeholdt i FileSystemObject.

FSO-metoder

Nedenstående tabel indeholder oplysninger om forskellige FileObjectSystem-metoder og de opgaver, de udfører:

Metode Beskrivelse
GetDrive, GetFolder og GetFile Disse metoder bruges til at hente oplysninger om henholdsvis drev, mapper og filer.
CreateFolder og CreateTextFile Hjælper med at oprette nye mapper eller filer.
DeleteFile og DeleteFolder Hjælper med at slette eksisterende filer eller mapper.
CopyFile og CopyFolder Disse metoder hjælper med at kopiere filer eller mapper fra et sted til et andet.
MoveFile og MoveFolder Disse metoder hjælper med at flytte filer eller mapper fra et sted til et andet.

Skabelse af et FileSystemObject i VBA: I dette afsnit vil vi beskæftige os med to ting:

  • Skabelse af en reference til Microsoft Scripting Runtime Library, dvs. Scrrun.dll
  • Skabelse af et FSO-objekt.

Oprettelse af en reference til Microsoft Scripting Runtime Library

For at oprette en reference til Microsoft Scripting Runtime Library skal du følge nedenstående trin:

  • Først og fremmest skal du åbne VBA-editoren ved at trykke på “Alt + F11”.

  • Næst skal du navigere til “Tools” > “Reference” som vist ovenfor.

  • Dette vil åbne et referencevindue. Her skal du vælge og kontrollere posten “Microsoft Scripting Runtime” og klikke på “OK”.
  • Nu er referencen til Microsoft Scripting Runtime Library blevet tilføjet.

Opret et FSO-objekt

Det er nemt at oprette et FSO-objekt, følg nedenstående trin for at gøre dette:

  • I VBA-editoren skal du navigere til “Insert” > “Module”.

  • Nu skriver du i modulvinduet “Public FSO As New FileSystemObject“.
  • Dette vil oprette et objekt af FileSystemObject med navnet FSO.

Derpå kan du blot få adgang til FileSystemObject’s metoder ved hjælp af FSO-objektet.

6 Praktiske eksempler på adgang til FileSystemObject

Nu skal vi gå videre til nogle praktiske eksempler på FSO:

Eksempel 1: Brug FSO til at finde den samlede frie plads på et drev.

Nedenfor er koden til at gøre dette:

'Oprettelse af et FileSystemObject 
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Oprettelse af drevet
objekt Space = drv.FreeSpace
Space = Space / 1073741824 'Omregning af bytes til GB
Space = WorksheetFunction.Round(Space, 2) 'Afrunding
MsgBox "C: has free space = " & Space & " GB"
End Sub

Explanation: I denne kode har vi først oprettet et drevobjekt ved hjælp af ‘GetDrive‘-metoden, og derefter har vi brugt dets ‘FreeSpace‘-egenskab til at hente den frie plads.

Slutteligt har vi vist den frie plads ved hjælp af en meddelelsesboks.

Bemærk, at der er to egenskaber til at hente den frie plads på et drev, nemlig drv.FreeSpace og drv.AvailableSpace.

Eksempel 2: Kontroller, om en mappe findes eller ej. Hvis mappen ikke findes, skal du oprette den pågældende mappe.

Nedenfor er koden:

'Oprettelse af et FileSystemObject 
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Indtast stien til den mappe, der skal kontrolleres :")
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

Oplysning: I koden har vi brugt en InputBox-funktion til at få stien til mappen fra brugeren. Herefter har vi ved hjælp af If-erklæringen sammen med FolderExists metoden kontrolleret, om den pågældende mappe er til stede eller ej. Hvis mappen ikke er til stede, opretter vi den pågældende mappe ved hjælp af CreateFolder metoden.

Bemærk: CreateFolderMetoden opretter kun en enkelt mappe ad gangen. Så hvis du angiver et argument “C:\Folder1\Folder2\Folder3” til den, vil den kun oprette mappe3 inde i mappe2. Men hvis Mappe2 ikke findes, vil den kaste en sti ikke fundet en fejl.

Eksempel 3: Skriv en kode ved hjælp af FSO for at kopiere en mappe fra et sted til et andet.

Nedenfor er koden til at opnå dette:

‘Oprettelse af et FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder “C:\Source-Folder\”, “D:\Destination-Folder\”, True MsgBox “Copying Done!” End Sub

Oplysning: I koden har vi brugt CopyFolder metoden for FSO, denne metode accepterer tre argumenter:

  • Source Path
  • Destination path
  • Et boolsk argument for at angive Overwrite Existing.

Eksempel 4: Brug af FileSystemObject til at hente Temp-mappen, System-mappen og Windows-mappen.

For at gøre dette kan vi bruge nedenstående kode:

'Oprettelse af et FileSystemObject 
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 mappesti = " & Windows_Fldr & vbNewLine & _ "System mappesti = " & System_Fldr & vbNewLine & _ "Temp mappesti = " & Temp_Fldr)
End Sub

Oplysning: I koden har vi brugt GetSpecialFolder metoden for FSO, denne metode accepterer et enkelt numerisk argument, dvs. 0-2.

  • FSO.GetSpecialFolder(0) – Fetches the path of Windows Folder.
  • FSO.GetSpecialFolder(1) – Fetches the path of System Folder.
  • FSO.GetSpecialFolder(2) – Henter stien til den lokale midlertidige mappe.

Eksempel 5: Opret en tekstfil, skriv noget indhold til den, læs derefter filen, og slet til sidst filen.

Nedenfor er koden til at opnå dette:

'Oprettelse af et 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" 'Fil der skal oprettes
'Oprettelse af en fil og skrivning af indhold til den
FileContent = InputBox("Indtast filindholdet")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Læser fra den fil, som vi netop har oprettet
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Endelig Sletning af filen
File.Delete (True)
End If
End Sub

Oplysning: Denne kode opretter først en tekstfil, tilføjer indhold til den, læser den derefter, viser den ved hjælp af en meddelelsesboks og sletter til sidst filen.

Eksempel 6: Skriv en VBA-kode, der kan iterere alle de filer, der findes i en mappe, og som også henter deres størrelse og ændringsdato.

Den følgende kode kan udføre denne opgave:

'Oprettelse af et FileSystemObject 
Public FSO As New FileSystemObject
Sub ListFiles()
'Deklaration af variabler
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Angivelse af stien til mappen
strPath = "C:\Users\Aniee\Desktop\ExcelTrick\\ "
'Opret objektet for denne mappe
Set objFolder = FSO.GetFolder(strPath)
'Kontroller, om mappen er tom eller ej
If objFolder.Files.Count = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Adding Column names for A, B, and C
Cells(1, "A").Value = "File Name"
Cells(1, "B").Value = "Size"
Cells(1, "C").Value = "Modified Date/Time"
'Find den næste tilgængelige række
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Sløjfe gennem hver fil i mappen
For Each objFile In objFolder.Files
'Liste over navn, størrelse og dato/tidspunkt for den aktuelle fil
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Find den næste række NextRow = NextRow + 1
Næste objFile
End Sub

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.