FileSystemObject în VBA – Explicații

FileSystemObject, numit și FSO, oferă un model ușor bazat pe obiecte pentru a accesa sistemul de fișiere al unui computer. Trebuie pur și simplu să creați o instanță de FileSystemObject în VBA și apoi puteți genera fișiere, citi fișiere, șterge fișiere, itera prin dosare și face multe alte operații pe sistemul de fișiere al computerului dumneavoastră.

FileSystemObject este prezent în interiorul Microsoft Scripting Runtime Library, adică Scrrun.dll. Această DLL suportă crearea și manipularea fișierelor folosind obiectul TextStream și acesta este motivul pentru care FSO nu suportă operarea pe fișiere binare.

Carte de materii

Utilizări ale obiectului File System Object

FileSystemObject poate fi utilizat pentru mai multe sarcini, cum ar fi:

  • Crearea, deschiderea, citirea, scrierea și ștergerea fișierelor text.
  • Crearea, modificarea și ștergerea folderelor.
  • Iterarea fișierelor și folderelor.
  • Copierea și mutarea fișierelor sau folderelor.
  • Verificarea dacă o locație (cale de fișier) există sau nu.

Accesarea FileSystemObject

The FileSystemObject cuprinde mai multe colecții de obiecte și fiecare dintre aceste colecții de obiecte conține informații despre un aspect specific al sistemului de fișiere. Aceste colecții sunt:

Object Description
Drive Acest obiect vă permite să obțineți informații despre o unitate atașată la sistemul dumneavoastră. De exemplu, vă poate spune care este spațiul disponibil într-o unitate, numele logic al acesteia etc. Rețineți că obiectul unitate la care ne referim aici nu înseamnă neapărat hard disk, ci poate fi un CD-ROM, o unitate Flash, RAM sau chiar o unitate conectată logic prin LAN.
Folder Acest obiect vă permite să creați, să ștergeți, să mutați sau să interogați o ierarhie de dosare.
File Acest obiect vă permite să creați, să ștergeți, să mutați sau să interogați un fișier.
TextStream Obiectul TextStream vă permite să citiți sau să scrieți fișiere text.

În concluzie, schematic, un FileSystemObject poate fi prezentat sub forma:

Vă rugăm să rețineți că FSO comunică cu majoritatea obiectelor de mai sus în mod indirect. Acesta conține doar direct colecția de obiecte pentru „Drives”. Fiecare obiect „Drive” din colecția „Drives” conține un lanț de obiecte „Folder”. Și fiecare obiect „Folder” conține o colecție „File”.

Pentru a fi mai semnificativ, să o spunem astfel: Un „FileSystemObject” conține trei metode principale pentru a prelua (citi) informații specifice despre „Drives”, „Folders” sau „Files”, aceste metode sunt GetDrive, GetFolder și GetFile respectiv. Acum, să spunem că aveți nevoie să aflați dimensiunea unui anumit fișier, așa că veți crea o instanță a metodei GetFile și apoi veți prelua proprietatea size .

Nota: GetDrive, GetFolder și GetFile nu sunt singurele metode din cadrul FSO, le-am folosit doar pentru a explica lucrurile. În secțiunea de mai jos vom vedea toate metodele conținute în FileSystemObject.

Metode FSO

Tabelul de mai jos oferă detalii despre diferitele metode FileObjectSystem și sarcinile pe care le îndeplinesc:

Metoda Descriere
GetDrive, GetFolder și GetFile Aceste metode sunt utilizate pentru a prelua informații despre Drive, Folders și, respectiv, Files.
CreateFolder ș i CreateFolder ș i CreateFile Ajută la crearea de noi dosare sau fișiere.
DeleteFile ș i DeleteFolder Ajută la ștergerea fișierelor sau dosarelor existente.
CopyFile și CopyFolder Aceste metode ajută la copierea fișierelor sau folderelor dintr-o locație în alta.
MoveFile și MoveFolder Aceste metode ajută la mutarea fișierelor sau folderelor dintr-o locație în alta.

Crearea unui FileSystemObject în VBA: În această secțiune, ne vom ocupa de două lucruri:

  • Crearea unei referințe la Microsoft Scripting Runtime Library, adică Scrrun.dll
  • Crearea unui obiect FSO.

Crearea unei referințe la Microsoft Scripting Runtime Library

Pentru a crea o referință la Microsoft Scripting Runtime Library urmați pașii de mai jos:

  • În primul rând, deschideți editorul VBA apăsând „Alt + F11”.

  • În continuare, navigați la „Tools” > „Reference”, așa cum se arată mai sus.

  • Aceasta va deschide o fereastră de referință. Aici selectați și bifați intrarea „Microsoft Scripting Runtime” și faceți clic pe „OK”.
  • Acum a fost adăugată referința la Microsoft Scripting Runtime Library.

Crearea unui obiect FSO

Crearea unui obiect FSO este simplă, urmați pașii de mai jos pentru a face acest lucru:

  • În editorul VBA navigați la „Insert” > „Module”.

  • Acum, în fereastra modulului, tastați „Public FSO As New FileSystemObject„.
  • Aceasta va crea un obiect FileSystemObject cu numele FSO.

După aceasta, puteți accesa pur și simplu metodele FileSystemObject folosind obiectul FSO.

6 Exemple practice de accesare a FileSystemObject

Acum să trecem la câteva exemple practice de FSO:

Exemplul 1: Utilizați FSO pentru a afla spațiul liber total al unei unități de disc.

Acesta este codul pentru a face acest lucru:

'Crearea unui FileSystemObject 
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Crearea unității
object Space = drv.FreeSpace
Space = Space / 1073741824 'conversia octeților în GB
Space = WorksheetFunction.Round(Space, 2) 'Rotunjire
MsgBox "C: are spațiu liber = " & Space & " GB"
End Sub

Explicație: În acest cod am creat mai întâi un obiect Drive folosind metoda ‘GetDrive‘ și apoi am folosit proprietatea sa ‘FreeSpace‘ pentru a prelua spațiul liber.

În cele din urmă, am afișat spațiul liber folosind o casetă de mesaje.

Rețineți că există două proprietăți pentru a prelua spațiul liber al unei unități, și anume drv.FreeSpace și drv.AvailableSpace.

Exemplul 2: Verificați dacă un folder există sau nu. Dacă dosarul nu există, atunci creați dosarul respectiv.

Codul de mai jos este următorul:

'Crearea unui FileSystemObject 
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Enter the path of the folder to check :")
If Len(Fldr_name) > 0
Then If FSO.FolderExists(Fldr_name) = True Then
MsgBox "Folder Exists!" (Dosarul există!)
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Folder Created!")
End If Else MsgBox "Wrong Input"
End If
End If
End Sub

Explicație: În cod, am utilizat o funcție InputBox pentru a obține calea folderului de la utilizator. După aceasta, folosind instrucțiunea If împreună cu FolderExists metoda, am verificat dacă dosarul respectiv este prezent sau nu. Dacă dosarul nu este prezent, atunci creăm acel dosar folosind metoda CreateFolder .

Nota: CreateFoldermetoda va crea doar un singur dosar la un moment dat. Deci, dacă îi furnizați un argument „C:\Folder1\Folder2\Folder3”, atunci va crea numai Folder3 în interiorul Folder2. Dar dacă Folder2 nu există, atunci va afișa o eroare de tip „path not found”.

Exemplul 3: Scrieți un cod folosind FSO pentru a copia un folder dintr-o locație în alta.

Acesta este codul pentru a realiza acest lucru:

‘Crearea unui FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder „C:\Source-Folder\”, „D:\Destination-Folder\”, True MsgBox „Copying Done!” End Sub

Explicație: În cod, am folosit metoda CopyFolder metoda FSO, această metodă acceptă trei argumente:

  • Calea sursă
  • Calea destinație
  • Un argument boolean pentru a specifica Suprascrierea existentului.

Exemplul 4: Folosind FileSystemObject se preia directorul Temp, folderul System și folderul Windows.

Pentru a face acest lucru putem folosi codul de mai jos:

'Crearea unui 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

Explicație: În cod, am folosit metoda GetSpecialFolder metoda FSO, această metodă acceptă un singur argument numeric, adică 0-2.

  • FSO.GetSpecialFolder(0) – Preia calea dosarului Windows.
  • FSO.GetSpecialFolder(1) – Preia calea dosarului System.
  • FSO.GetSpecialFolder(2) – Fetches path of the Local Temporary folder.

Exemplu 5: Creați un fișier text, scrieți un anumit conținut în el, apoi citiți fișierul și, în final, ștergeți fișierul.

Mai jos este codul pentru a realiza acest lucru:

'Crearea unui FileSystemObject Public 
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
Dim File As File
FileName = "C:\TestDirectory\File.txt" 'File to be created
'Crearea unui fișier și scrierea conținutului în el
FileContent = InputBox("Enter the File Content")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Citirea din fișierul pe care tocmai l-am creat
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' În cele din urmă Ștergerea fișierului
File.Delete (True)
End If
End Sub

Explicație: Acest cod creează mai întâi un fișier text, îi adaugă conținut, apoi îl citește, îl afișează folosind o casetă de mesaje și, în final, șterge acel fișier.

Exemplul 6: Scrieți un cod VBA care poate itera toate fișierele prezente în interiorul unui dosar și, de asemenea, preia dimensiunea și data modificării acestora.

Codul următor poate îndeplini această sarcină:

'Crearea unui FileSystemObject 
Public FSO As New FileSystemObject
Sub ListFiles()
'Declararea variabilelor
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Specificarea căii de acces a folderului
strPath = "C:\Users\Aniee\Desktop\ExcelTrick\ "
'Creați obiectul acestui dosar
Set objFolder = FSO.GetFolder(strPath)
'Verifică dacă dosarul este gol sau nu
If objFolder.Files.Count = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Adăugarea de nume de coloane pentru A, B și C
Cells(1, "A").Value = "File Name"
Cells(1, "B").Value = "Size"
Cells(1, "C").Value = "Modified Date/Time"
'Find the next available row
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
'Parcurge în buclă fiecare fișier din dosar
For Each objFile In objFolder.Files
'Enumeră numele, dimensiunea și data/ora fișierului curent
Cells(NextRow, 1).Value = objFile.Name
Cells(NextRow, 2).Value = objFile.Size
Cells(NextRow, 3).Value = objFile.DateLastModified
'Găsiți următorul rând NextRow = NextRow + 1
Next objFile
End Sub

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.