Utilizarea VBA FileSystemObject (FSO) în Excel - Prezentare simplă și exemple

Când folosim VBA în Excel, cea mai mare parte este pentru a ne automatiza sarcinile.

Acest lucru înseamnă, de asemenea, că, de cele mai multe ori, lucrăm cu celule și intervale, foi de lucru, registre de lucru și alte obiecte care fac parte din aplicația Excel.

Dar VBA este mult mai puternic și poate fi folosit și pentru a lucra cu lucruri în afara Excel.

În acest tutorial, vă voi arăta cum să utilizați VBA FileSystemObject (FSO) pentru a lucra cu fișiere și foldere pe sistemul dvs. sau pe unitățile de rețea.

Ce este VBA FileSystemObject (FSO)?

FileSystemObject (FSO) vă permite să accesați sistemul de fișiere al computerului. Folosindu-l, puteți accesa și modifica fișierele / folderele / directoarele din sistemul computerului.

De exemplu, mai jos sunt câteva dintre lucrurile pe care le puteți face utilizând FileSystemObject în Excel VBA:

  • Verificați dacă există un fișier sau un folder.
  • Creați sau redenumiți foldere / fișiere.
  • Obțineți o listă cu toate numele fișierelor (sau numele subdosarelor) dintr-un dosar.
  • Copiați fișiere dintr-un dosar în altul.

Sper să ai ideea.

Voi acoperi toate aceste exemple de mai sus (plus multe) mai târziu în acest tutorial.

În timp ce unele dintre lucrurile menționate mai sus pot fi realizate folosind funcții tradiționale VBA (cum ar fi funcția DIR) și metode, care ar duce la coduri mai lungi și mai complicate. FileSystemObject facilitează lucrul cu fișiere și foldere, păstrând în același timp codul curat și scurt.

Notă: FSO poate fi utilizat numai în Excel 2000 și versiunile ulterioare.

La ce toate obiectele puteți accesa prin FileSystemObject?

După cum am menționat mai sus, puteți accesa și modifica fișiere și foldere utilizând FileSystemObject în VBA.

Mai jos este un tabel care prezintă cele mai importante obiecte pe care le puteți accesa și modifica cu ajutorul FSO:

Obiect Descriere
Conduce Drive Object vă permite să obțineți informații despre unitate, cum ar fi dacă există sau nu, numele căii, tipul unității (amovibil sau fix), dimensiunea etc.
Pliant Obiectul Folder vă permite să creați sau să modificați foldere în sistemul dvs. De exemplu, puteți crea, șterge, redenumi, copia folderele folosind acest obiect.
Fişier File Object vă permite să lucrați cu fișiere din sistemul dvs. De exemplu, puteți crea, deschide, copia, muta și șterge fișiere folosind acest obiect.
TextStream Obiectul TextStream vă permite să creați sau să citiți fișiere text.

Fiecare dintre obiectele de mai sus are metode pe care le puteți folosi pentru a lucra cu acestea.

Pentru a vă oferi un exemplu, dacă doriți să ștergeți un folder, veți utiliza metoda DeleteFolder a obiectului Folder. În mod similar, dacă doriți să copiați un fișier, veți utiliza metoda CopyFile a obiectului File.

Nu vă faceți griji dacă acest lucru pare copleșitor sau greu de înțeles. Veți obține o înțelegere mult mai bună atunci când parcurgeți exemplele pe care le-am abordat în acest tutorial.

Doar pentru scopul de referință, am acoperit toate metodele FileSystemObject (pentru fiecare obiect) la sfârșitul acestui tutorial.

Activarea FileSystemObject în Excel VBA

FileSystemObject nu este disponibil în mod implicit în Excel VBA.

Deoarece avem de-a face cu fișiere și foldere care se află în afara aplicației Excel, trebuie mai întâi să creăm o referință la biblioteca care conține aceste obiecte (unități, fișiere, foldere).

Acum există două moduri în care puteți începe să utilizați FileSystemObject în Excel VBA:

  1. Setarea referinței la Microsoft Scripting Runtime Library (Scrrun.dll)
  2. Crearea unui obiect pentru a se referi la bibliotecă din codul în sine

În timp ce ambele metode funcționează (și vă voi arăta cum să faceți acest lucru în continuare), vă recomand să utilizați prima metodă.

Notă: Când activați FileSystemObject, puteți accesa toate obiectele din acesta. Aceasta include FileSystemObject, Drive, Files, Folders etc. Mă voi concentra în mod major pe FileSystemObject în acest tutorial.

Setarea referinței la Microsoft Scripting Runtime Library

Când creați o referință la Biblioteca de rulare Scripting, permiteți Excel VBA accesul la toate proprietățile și metodele fișierelor și folderului. După ce ați făcut acest lucru, puteți face referire la obiectul fișiere / foldere / unități din Excel VBA (la fel cum puteți consulta celulele, foile de lucru sau registrele de lucru).

Mai jos sunt pașii pentru a crea o referință la biblioteca Microsoft Scripting Runtime:

  1. În Editorul VB, faceți clic pe Instrumente.
  2. Faceți clic pe Referințe.
  3. În caseta de dialog Referințe care se deschide, parcurgeți referințele disponibile și bifați opțiunea „Microsoft Scripting Runtime”.
  4. Faceți clic pe OK.

Pașii de mai sus vă vor permite acum să vă referiți la obiectele FSO din Excel VBA.

Crearea unei instanțe de FileSystemObject în cod

După ce ați setat referința la biblioteca Scripting FileSystemObject, trebuie să creați o instanță a obiectului FSO în codul dvs.

Odată ce acest lucru este creat, îl puteți folosi în VBA.

Mai jos este codul care va seta variabila obiect MyFSO ca obiect FileSystemObject:

Sub CreatingFSO () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject End Sub

În acest cod, mai întâi am declarat variabila MyFSO ca obiect de tip FileSystemObject. Acest lucru este posibil doar pentru că am creat o referință la Biblioteca de Scripturi Runtime Microsoft. Dacă referința nu este creată, acest lucru vă va da o eroare (deoarece Excel nu ar recunoaște ce înseamnă FileSystemObject).

În a doua linie, se întâmplă două lucruri:

  1. Cuvântul cheie NOU creează o instanță a FileSystemObject. Aceasta înseamnă că acum pot folosi toate metodele FileSystemObject pentru a lucra cu fișiere și foldere. Dacă nu creați această instanță, nu veți putea accesa metodele FSO.
  2. Cuvântul cheie SET setează obiectul MyFSO la această nouă instanță FileSystemObject. Acest lucru îmi permite să folosesc acest obiect pentru a accesa fișiere și foldere. De exemplu, dacă trebuie să creez un folder, pot folosi metoda MyFSO.CreateFolder.

Dacă doriți, puteți combina și cele două afirmații de mai sus într-una, așa cum se arată mai jos:

Sub CreatingFSO () Dim MyFSO Ca nou FileSystemObject End Sub

Un mare avantaj al utilizării acestei metode (care este de a seta referința la Biblioteca de scriptare Microsoft Scripting Runtime) este că atunci când utilizați obiectele FSO din codul dvs., veți putea utiliza caracteristica IntelliSense care prezintă metodele și proprietățile asociate cu un obiect (așa cum se arată mai jos).

Acest lucru nu este posibil atunci când creați referința din interiorul codului (acoperit în continuare).

Crearea unui obiect din cod

O altă modalitate de a crea o referință la FSO este făcând-o din cod. În această metodă, nu este necesar să creați nicio referință (așa cum sa făcut în metoda anterioară).

Când scrieți codul, puteți crea un obiect din interiorul codului și consultați Scripting.FileSystemObject.

Codul de mai jos creează un obiect FSO și apoi face din acesta un tip FileSystemObject.

Sub FSODemo () Dim FSO As Object Set FSO = CreateObject ("Scripting.FileSystemObject") End Sub

Deși acest lucru poate părea mai convenabil, un mare dezavantaj al utilizării acestei metode este că nu ar afișa un IntelliSense atunci când lucrați cu obiecte în FSO. Pentru mine, acesta este un negativ imens și recomand întotdeauna utilizarea metodei anterioare de activare a FSO (care este prin setarea referinței la „Microsoft Scripting Runtime”)

Exemple VBA FileSystemObject

Acum să ne scufundăm și să aruncăm o privire la câteva exemple practice de utilizare a FileSystemObject în Excel.

Exemplul 1: verificați dacă există un fișier sau un folder

Următorul cod va verifica dacă folderul cu numele „Test” există sau nu (în locația specificată).

Dacă folderul există, condiția IF este True și afișează un mesaj - „Folderul există” într-o casetă de mesaje. Și dacă nu există, apare un mesaj - Folderul nu există ”.

Sub CheckFolderExist () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FolderExists ("C: \ Users \ sumit \ Desktop \ Test") Then MsgBox "The Folder Exists" Else MsgBox "Folderul nu există" End If End Sub

În mod similar, puteți verifica, de asemenea, dacă există sau nu un fișier.

Codul de mai jos verifică dacă există sau nu un fișier cu numele Test.xlsx în folderul specificat.

Sub CheckFileExist () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FileExists ("C: \ Users \ sumit \ Desktop \ Test \ Test.xlsx") Then MsgBox "The File Exists" Else MsgBox "Fișierul nu există "Încheie dacă se termină Sub

Exemplul 2: Creați un folder nou în locația specificată

Codul de mai jos ar crea un folder cu numele „Test” în unitatea C a sistemului meu (va trebui să specificați calea din sistemul dvs. unde doriți să creați folderul).

Sub CreateFolder () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject MyFSO.CreateFolder ("C: \ Users \ sumit \ Desktop \ Test") End Sub

În timp ce acest cod funcționează bine, ar arăta o eroare în cazul în care folderul există deja.

Codul de mai jos verifică dacă folderul există deja și creează un folder dacă nu există. În cazul în care folderul există deja, acesta afișează un mesaj. Pentru a verifica dacă folderul există, am folosit Metoda FolderExists al FSO.

Sub CreateFolder () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FolderExists ("C: \ Users \ sumit \ Desktop \ Test") Then MsgBox "The Folder already Exist" Altele MyFSO.CreateFolder ("C: \ Users \ sumit \ Desktop \ Test ") End If End Sub

Exemplul 3: obțineți o listă a tuturor fișierelor dintr-un folder

Codul de mai jos ar arăta numele tuturor fișierelor din folderul specificat.

Sub GetFileNames () Dim MyFSO as FileSystemObject Dim MyFile as File Dim MyFolder as Folder Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder ("C: \ Users \ sumit \ Desktop \ Test") Pentru fiecare MyFile din MyFolder.Files Debug.Print MyFile.Name Next MyFile End Sub

Acest cod este puțin mai complex decât cele pe care le-am văzut deja.

După cum am menționat mai sus în acest tutorial, când faceți referire la „Biblioteca de scripturi Microsoft Runtime”, puteți utiliza FileSystemObject, precum și toate celelalte obiecte (cum ar fi Fișiere și foldere).

În codul de mai sus, folosesc trei obiecte - FileSystemObject, File și Folder. Acest lucru îmi permite să parcurg fiecare fișier din folderul specificat. Apoi folosesc proprietatea nume pentru a obține lista tuturor numelor de fișiere.

Rețineți că folosesc Debug.Print pentru a obține numele tuturor fișierelor. Aceste nume vor fi listate în fereastra imediată din Editorul VB.

Exemplul 4: obțineți lista tuturor subdirectoarelor dintr-un dosar

Codul de mai jos va da numele tuturor sub-folderelor din folderul specificat. Logica este exact aceeași cu cea prezentată în exemplul de mai sus. În loc de fișiere, în acest cod, am folosit sub-foldere.

Sub GetSubFolderNames () Dim MyFSO As FileSystemObject Dim MyFile As File Dim MyFolder As Folder Dim MySubFolder As Folder Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder ("C: \ Users \ sumit \ Desktop \ Test") pentru fiecare MySub În MyFolder.SubFolders Debug.Print MySubFolder.Name Următorul MySubFolder End Sub

Exemplul 5: Copiați un fișier dintr-un loc în altul

Codul de mai jos va copia fișierul din folderul „Sursă” și îl va copia în folderul „Destinație”.

Sub CopyFile () Dim MyFSO as FileSystemObject Dim SourceFile as String Dim DestinationFolder As String Set MyFSO = New Scripting.FileSystemObject SourceFile = "C: \ Users \ sumit \ Desktop \ Source \ SampleFile.xlsx" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination "MyFSO.CopyFile Source: = SourceFile, Destination: = DestinationFolder &" \ SampleFileCopy.xlsx "End Sub

În codul de mai sus, am folosit două variabile - SourceFile și DestinationFolder.

Fișierul sursă conține adresa fișierului pe care vreau să îl copiez, iar variabila DestinationFolder conține adresa folderului în care vreau să fie copiat fișierul.

Rețineți că nu este suficient să dați numele folderului de destinație atunci când copiați un fișier. De asemenea, trebuie să specificați numele fișierului. Puteți utiliza același nume de fișier sau îl puteți schimba. În exemplul de mai sus, am copiat fișierul și l-am numit SampleFileCopy.xlsx

Exemplul 6: Copiați toate fișierele dintr-un dosar în altul

Codul de mai jos va copia toate fișierele din folderul Sursă în folderul de destinație.

Sub CopyAllFiles () Dim MyFSO As FileSystemObject Dim MyFile As File Dim SourceFolder As String Dim DestinationFolder As String Dim MyFolder As Folder Dim MySubFolder As Folder SourceFolder = "C: \ Users \ sumit \ Desktop \ Source" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination "Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder (SourceFolder) Pentru fiecare MyFile din MyFolder.Files MyFSO.CopyFile Source: = MyFSO.GetFile (MyFile), _ Destinație: = DestinationFolder &" \ "& MyFile.Name, Overwritefiles: = False Next MyFile End Sub

Codul de mai sus va copia toate fișierele din folderul Sursă în folderul de destinație.

Rețineți că în metoda MyFSO.CopyFile, am specificat proprietatea „Overwritefiles” ca fiind False (aceasta este True în mod implicit). Acest lucru vă asigură că în cazul în care aveți deja fișierul în dosar, acesta nu este copiat (și veți vedea o eroare). Dacă eliminați „Overwritefiles” sau setați acest lucru la True, în cazul în care există fișiere în folderul de destinație cu același nume, acestea vor fi suprascrise.

Sfat Pro: Când copiați fișiere, există întotdeauna șansa de a suprascrie fișiere. O idee bună, în acest caz, este să adăugați marca de timp împreună cu numele. Acest lucru vă va asigura că numele sunt întotdeauna diferite și puteți urmări cu ușurință ce fișiere au fost copiate la ce oră.

Dacă doriți să copiați numai fișierele unei anumite extensii, puteți face acest lucru utilizând o instrucțiune IF Then pentru a verifica dacă extensia este sau nu xlsx.

Sub CopyExcelFilesOnly () Dim MyFSO As FileSystemObject Dim MyFile As File Dim SourceFolder As String Dim DestinationFolder As String Dim MyFolder As Folder Dim MySubFolder As Folder SourceFolder = "C: \ Users \ sumit \ Desktop \ Source" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination "Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder (SourceFolder) Pentru fiecare MyFile din MyFolder.Files Dacă MyFSO.GetExtensionName (MyFile) =" xlsx "Apoi MyFSO.CopyFile Source: = MyFSO.Get (MyFile), _ Destination: = DestinationFolder & "\" & MyFile.Name, Overwritefiles: = False End Dacă următorul MyFile End Sub

Metode FileSystemObject (FSO)

Iată metodele pe care le puteți utiliza pentru fiecare obiect. Acesta este doar pentru scop de referință și nu vă faceți griji prea mult. Utilizarea unora dintre acestea a fost arătată în exemplele acoperite mai sus.

Metode FSO Pentru obiect Descriere
DriveExists Conduce Verifică dacă unitatea există sau nu
GetDrive Conduce Returnează o instanță a obiectului de unitate pe baza căii specificate
GetDriveName Conduce Relansează numele unității
BuildPath Dosar fișier Generați o cale dintr-o cale existentă și un nume
Copiaza fisier Dosar fișier Copiază un fișier
GetAbsolutePathName Dosar fișier Întoarceți reprezentarea canonică a căii
GetBaseName Dosar fișier Returnează numele de bază dintr-o cale. De exemplu, „D: \ TestFolder \ TestFile.xlsm” va returna TextFile.xlsm
GetTempName Dosar fișier Generați un nume care poate fi folosit pentru a denumi un fișier temporar
CopyFolder Pliant Copiază un folder dintr-o locație în alta
Creeaza dosar Pliant Creează un folder nou
DeleteFolder Pliant Șterge folderul specificat
FolderExista Pliant Verifică dacă folderul există sau nu
GetFolder Pliant Returnează o instanță a obiectului folder pe baza căii specificate
GetParentFolderName Pliant Relansează numele folderului părinte pe baza căii specificate
GetSpecialFolder Pliant Obțineți locația diferitelor foldere de sistem.
MoveFolder Pliant Mută ​​un folder dintr-o locație în alta
Sterge fisierul Fişier Șterge un fișier
Fisierul exista Fişier Verifică dacă există sau nu un fișier
GetExtensionName Fişier Returnează extensia de fișier
Ia fisierul Fişier Returnează instanța unui obiect fișier pe baza căii specificate
GetFileName Fişier Returnează numele fișierului
GetFileVersion Fişier Returnează versiunea fișierului
MoveFile Fişier Mută ​​un fișier
CreateTextFile Fişier Creează un fișier text
GetStandardStream Fişier Recuperați fluxul standard de intrare, ieșire sau eroare
OpenTextFile Fişier Deschideți un fișier ca TextStream

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave