FileSystemObject i VBA – förklarat

FileSystemObject, även kallat FSO, är en enkel objektbaserad modell för att få tillgång till en dators filsystem. Du behöver bara skapa en instans av FileSystemObject i VBA och sedan kan du generera filer, läsa filer, ta bort filer, iterera genom mappar och göra många andra operationer på datorns filsystem.

FileSystemObject finns i Microsoft Scripting Runtime Library dvs. Scrrun.dll. Denna DLL stöder skapande och hantering av filer med hjälp av TextStream-objektet och detta är anledningen till att FSO inte stöder drift av binära filer.

Innehållsförteckning

Användning av File System Object

FileSystemObject kan användas för flera olika uppgifter, t.ex.:

  • Skapa, öppna, läsa, skriva och radera textfiler.
  • Skapa, ändra och ta bort mappar.
  • Iterera filer och mappar.
  • Kopiera och flytta filer eller mappar.
  • Kontrollera om en plats (filväg) finns eller inte.

Tillgång till FileSystemObject

FileSystemObject består av flera objektsamlingar och var och en av dessa objektsamlingar innehåller information om en specifik aspekt av filsystemet. Dessa samlingar är:

Object Description
Drive Med det här objektet kan du få information om en enhet som är ansluten till ditt system. Det kan till exempel berätta om det tillgängliga utrymmet på en enhet, dess logiska namn osv. Observera att det objekt för enheten som vi hänvisar till här inte nödvändigtvis betyder hårddisken, det kan vara en cd-rom, flash-enhet, RAM-minne eller till och med en logiskt ansluten enhet via LAN.
Mappa Med detta objekt kan du skapa, ta bort, flytta eller fråga efter en mapphierarki.
Fil Med detta objekt kan du skapa, ta bort, flytta eller fråga efter en fil.
TextStream TextStream-objektet gör det möjligt att läsa eller skriva textfiler.

Så diagrammatiskt kan ett FileSystemObject visas som:

Observera att FSO kommunicerar indirekt med de flesta av ovanstående objekt. Det innehåller bara direkt objektsamlingen för ”Drives”. Varje ”Drive”-objekt i samlingen ”Drives” innehåller en kedja av ”Folder”-objekt. Och varje ”Folder”-objekt innehåller en ”File”-samling.

För att göra det mer meningsfullt kan vi säga det så här: En FileSystemObject innehåller tre huvudmetoder för att hämta (läsa) specifik information om enheter, mappar eller filer, dessa metoder är GetDrive, GetFolder och GetFile respektive GetDrive, GetFolder och GetFile . Låt oss nu säga att du behöver ta reda på filstorleken för en viss fil, så du skapar en instans av GetFile metoden och hämtar sedan dess size egenskap.

Notera: GetDrive, GetFolder och GetFile är inte de enda metoderna inom FSO, jag har bara använt dem för att förklara saker och ting. I nedanstående avsnitt kommer vi att se alla metoder som finns inuti FileSystemObject.

FSO-metoder

I nedanstående tabell finns uppgifter om olika FileObjectSystem-metoder och de uppgifter de utför:

Metod Beskrivning
GetDrive, GetFolder och GetFile Dessa metoder används för att hämta information om Drive, Folders respektive Files.
CreateFolder och CreateTextFile Hjälper till att skapa nya mappar eller filer.
DeleteFile och DeleteFolder Hjälper till att radera befintliga filer eller mappar.
CopyFile och CopyFolder Dessa metoder hjälper till att kopiera filer eller mappar från en plats till en annan.
MoveFile och MoveFolder Dessa metoder hjälper till att flytta filer eller mappar från en plats till en annan.

Skapa ett FileSystemObject i VBA: I det här avsnittet kommer vi att behandla två saker:

  • Skapa en referens till Microsoft Scripting Runtime Library, dvs. Scrrun.dll
  • Skapa ett FSO Object.

Skapa en referens till Microsoft Scripting Runtime Library

För att skapa en referens till Microsoft Scripting Runtime Library följer du nedanstående steg:

  • Först av allt öppnar du VBA-editorn genom att trycka på ”Alt + F11”.

  • Nästa steg är att navigera till ”Tools” > ”Reference” som visas ovan.

  • Detta öppnar ett referensfönster. Markera och kontrollera posten ”Microsoft Scripting Runtime” och klicka på ”OK”.
  • Nu har referensen till Microsoft Scripting Runtime Library lagts till.

Skapa ett FSO-objekt

Det är enkelt att skapa ett FSO-objekt, följ nedanstående steg för att göra detta:

  • När du är inne i VBA-redigeraren navigerar du till ”Insert” > ”Module”.

  • Nu skriver du i modulfönstret ”Public FSO As New FileSystemObject”.
  • Detta kommer att skapa ett objekt av FileSystemObject med namnet FSO.

Efter det här kan du helt enkelt få tillgång till FileSystemObjects metoder med hjälp av FSO-objektet.

6 Praktiska exempel på åtkomst till FileSystemObject

Nu går vi över till några praktiska exempel på FSO:

Exempel 1: Använd FSO för att hitta det totala lediga utrymmet på en enhet.

Nedan följer koden för att göra detta:

'Skapa ett FileSystemObject 
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Skapa enheten
objekt Space = drv.FreeSpace
Space = Space / 1073741824 'konvertera bytes till GB
Space = WorksheetFunction.Round(Space, 2) 'Avrundning
MsgBox "C: has free space = " & Space & " GB"
End Sub

Explanation: Vi har först skapat ett objekt Drive med hjälp av metoden ”GetDrive” och sedan använt dess egenskap ”FreeSpace” för att hämta det fria utrymmet.

Slutligt har vi visat det fria utrymmet med hjälp av en meddelanderuta.

Notera att det finns två egenskaper för att hämta det fria utrymmet för en enhet, nämligen drv.FreeSpace och drv.AvailableSpace.

Exempel 2: Kontrollera om en mapp existerar eller inte. Om mappen inte finns, skapa den mappen.

Nedan följer koden:

'Skapa ett FileSystemObject 
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Ange sökvägen till den mapp som ska kontrolleras :")
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

Förklaring: I koden har vi använt en InputBox-funktion för att få sökvägen till mappen från användaren. Efter detta har vi med hjälp av If-satsen tillsammans med FolderExists metoden kontrollerat om mappen finns eller inte. Om mappen inte finns där skapar vi mappen med hjälp av CreateFolder metoden.

Notera: CreateFoldermetoden skapar bara en enda mapp åt gången. Så om du anger ett argument ”C:\Folder1\Folder2\Folder3” till den kommer den bara att skapa Folder3 inuti Folder2. Men om Folder2 inte existerar kommer den att kasta ett fel om att sökvägen inte har hittats.

Exempel 3: Skriv en kod med hjälp av FSO för att kopiera en mapp från en plats till en annan.

Nedan följer koden för att åstadkomma detta:

’Skapa ett FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder ”C:\Source-Folder\”, ”D:\Destination-Folder\”, True MsgBox ”Copying Done!” End Sub

Förklaring: I koden har vi använt CopyFolder metoden för FSO, denna metod accepterar tre argument:

  • Källsökväg
  • Destinationssökväg
  • Ett boolskt argument för att specificera Overwrite Existing.

Exempel 4: Användning av FileSystemObject för att hämta Temp-katalogen, System-mappen och Windows-mappen.

För att göra detta kan vi använda nedanstående kod:

'Skapa ett 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 folder path = " & Windows_Fldr & vbNewLine & _ "System folder path = " & System_Fldr & vbNewLine & _ "Temp folder path = " & Temp_Fldr)
End Sub

Explanation: I koden har vi använt GetSpecialFolder metoden för FSO, denna metod accepterar ett enda numeriskt argument, dvs. 0-2.

  • FSO.GetSpecialFolder(0) – Hämtar sökvägen till Windows-mappen.
  • FSO.GetSpecialFolder(1) – Hämtar sökvägen till systemmappen.
  • FSO.GetSpecialFolder(2) – Hämtar sökvägen till den lokala temporära mappen.

Exempel 5: Skapa en textfil, skriv innehåll i den, läs sedan filen och radera filen.

Nedan följer koden för att åstadkomma detta:

'Skapa ett 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 som ska skapas
'Skapa en fil och skriva innehåll till den
FileContent = InputBox("Ange filinnehållet")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Läser från filen som vi just har skapat
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Slutligen raderar filen
File.Delete (True)
End If
End Sub

Förklaring: Den här koden skapar först en textfil, lägger till innehåll i den, läser den sedan, visar den med hjälp av en meddelanderuta och raderar slutligen filen.

Exempel 6: Skriv en VBA-kod som kan iterera alla filer som finns i en mapp och även hämtar deras storlek och ändringsdatum.

Följande kod kan utföra denna uppgift:

'Skapa ett FileSystemObject 
Public FSO As New FileSystemObject
Sub ListFiles()
'Deklarera variabler
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Ange sökvägen till mappen
strPath = "C:\Users\Aniee\Desktop\ExcelTrick\ "
'Skapa objektet för denna mapp
Set objFolder = FSO.GetFolder(strPath)
'Kontrollera om mappen är tom eller inte
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"
'Hitta nästa tillgängliga rad
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Slinga dig igenom varje fil i mappen
For Each objFile In objFolder.Files
'Lista namn, storlek och datum/tid för den aktuella filen
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Hitta nästa rad NextRow = NextRow + 1
Next objFile
End Sub

Lämna ett svar

Din e-postadress kommer inte publiceras.