Funcția VBA DIR - O explicație ușoară cu exemple

VBA are câteva funcții utile care vă pot duce la automatizarea în Excel la nivelul următor.

O astfel de funcție este Funcția VBA DIR.

Deși în sine, poate părea o funcție simplă care face un lucru specific.

Dar când îl combinați cu alte elemente utile ale limbajului de codare VBA, puteți crea lucruri puternice (acoperite în exemplele de mai jos din acest tutorial).

Ce face funcția VBA Dir?

Utilizați funcția VBA DIR atunci când doriți să obțineți numele fișierului sau al unui folder, folosind numele căii lor.

Pentru a vă oferi un exemplu, dacă aveți un fișier Excel într-un folder, puteți utiliza funcția VBA DIR pentru a obține numele acelui fișier Excel (sau orice alt tip de fișier).

Ce se întâmplă dacă vreau să obțin numele tuturor fișierelor Excel din folder (sau ale tuturor fișierelor - fie că este fișier Excel sau nu)?

Poți face și tu asta!

Când utilizați funcția DIR o dată, aceasta returnează fișierul primul nume de fișier într-un dosar. Acum, dacă doriți să obțineți și numele celui de-al doilea, al treilea, al patrulea fișier, de asemenea, puteți utiliza din nou funcția DIR (acoperită mai târziu ca exemplu).

Dir returnează primul nume de fișier care se potrivește cu calea. Pentru a obține orice nume de fișiere suplimentare care se potrivesc cu calea, sunați Dir din nou fără argumente. Când nu se mai potrivesc nume de fișiere, Dir returnează un șir de lungime zero („”). Prezentate în exemplele 3 și 4 mai târziu în acest tutorial.

Sintaxa funcției VBA DIR

Dir [(nume de cale [, atribute])]
  • calea: Acesta este un argument opțional. Acesta poate fi numele fișierului, numele folderului sau numele directorului. Dacă calea nu este găsită, funcția VBA DIR returnează un șir de lungime zero („”)
  • atribute: Acesta este un argument opțional. Puteți utiliza acest argument pentru a specifica unele atribute și funcția DIR va returna numele fișierelor pe baza acestor atribute. De exemplu, dacă doriți o listă a tuturor fișierelor ascunse sau a fișierelor numai în citire (împreună cu fișierele fără atribute), trebuie să specificați acest lucru în acest argument.

Atribute disponibile pentru a fi utilizate în funcția VBA DIR (puteți utiliza unul sau mai multe dintre acestea):

Constant Valoare Descriere
vbNormal 0 (Implicit) Specifică fișierele fără atribute.
vbReadOnly 1 Specifică fișierele numai în citire în plus față de fișierele fără atribute.
vbAscuns 2 Specifică fișierele ascunse în plus față de fișierele fără atribute.
VbSystem 4 Specifică fișierele de sistem în plus față de fișierele fără atribute. Nu este disponibil pe Macintosh.
vbVolume 8 Specifică eticheta volumului; dacă se specifică orice alt atribut, vbVolume este ignorat. Nu este disponibil pe Macintosh.
vbDirectory 16 Specifică directoare sau foldere în plus față de fișierele fără atribute.
vbAlias 64 Numele fișierului specificat este un alias. Disponibil numai pe Macintosh.

Utilizarea caracterelor wildcard cu funcția DIR

Dacă lucrați cu Windows, puteți utiliza și caracterele wildcard în funcția DIR.

Rețineți că nu le puteți utiliza atunci când lucrați cu VBA în Macintosh.

Utilizarea metacaracterelor poate fi utilă atunci când:

  • Doriți să obțineți numele fișierelor unui anumit tip de fișier (cum ar fi .XLSX sau .PPTX)
  • Când aveți un sufix / prefix specific în numele fișierelor și doriți să obțineți numele acestor fișiere / foldere / directoare. De exemplu, dacă doriți numele tuturor fișierelor cu prefixul 2021-2022 în el, puteți face acest lucru folosind caractere wildcard.

Există trei caractere wildcard în Excel:

  1. * (asterisc) - Reprezintă orice număr de caractere. De exemplu, 2019* v-ar da numele tuturor fișierelor cu prefixul 2021-2022 în el.
  2. ? (semnul întrebării) - Reprezintă un singur personaj. De exemplu, 2021-2022? v-ar da numele tuturor fișierelor care încep cu 2021-2022 și mai au un caracter în nume (cum ar fi 2021-2022A, 2021-2022B, 2021-2022C și așa mai departe)

Notă: Mai există un caracter comodin - tilde (~). Deoarece nu este folosit mult, am omis explicația sa. Puteți citi mai multe despre aceasta aici, dacă sunteți interesat.

Funcția VBA DIR - Exemple

Acum să ne scufundăm și să vedem câteva exemple de utilizare a funcției VBA DIR.

Exemplul 1 - Obținerea numelui fișierului din calea sa

Când aveți calea unui fișier, puteți utiliza funcția DIR pentru a obține numele fișierului din acesta.

De exemplu, codul de mai jos returnează numele fișierului și îl afișează într-o casetă de mesaje.

Sub GetFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub

Codul de mai sus utilizează o variabilă „FileName” pentru a stoca numele fișierului returnat de funcția DIR. Apoi folosește o casetă de mesaj pentru a afișa numele fișierului (așa cum se arată mai jos).

Și ce se întâmplă când fișierul nu există?

În acest caz, funcția DIR va returna un șir gol.

Codul de mai jos folosește o instrucțiune If Then Else pentru a verifica dacă fișierul există sau nu. Dacă fișierul nu există, se afișează o casetă de mesaj cu textul „Fișierul nu există”, altfel arată numele fișierului.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") If FileName "" Then MsgBox FileName Else MsgBox "File doesn't Exist" End If End Sub

Exemplul 2 - Verificați dacă un director există sau nu (și creați dacă nu există)

Codul de mai jos verifică dacă folderul „Test” există sau nu.

O casetă de mesaje este utilizată pentru a afișa un mesaj în cazul în care folderul există sau când acesta nu există.

Sub CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Dacă CheckDir "" Atunci MsgBox CheckDir & "există" Else MsgBox "Directorul nu există „End If End Sub

Puteți rafina acest cod în continuare pentru a verifica dacă folderul există sau nu, iar dacă nu există, puteți utiliza VBA pentru a crea acel folder.

Mai jos este codul care folosește fișierul Funcția MkDir pentru a crea un dosar în cazul în care nu există.

Sub CreateDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" Atunci MsgBox CheckDir & "folder exist" Altele MkDir PathName MsgBox „A fost creat un dosar cu numele” & CheckDir End If End Sub

Exemplul 3 - Obțineți numele tuturor fișierelor și folderelor dintr-un director

Dacă doriți să obțineți o listă cu toate numele fișierelor și folderelor dintr-un director, puteți utiliza funcția DIR.

Codul de mai jos listează toate fișierele și numele folderelor din folderul Test (care se află la următoarea cale - C: \ Users \ sumit \ Desktop \ Test \).

Folosesc Debug.Print pentru a afișa numele în fereastra Imediat. Puteți utiliza acest lucru și pentru a enumera numele într-o casetă de mesaj sau într-o coloană din Excel.

Sub GetAllFile & FolderNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

Bucla Do While din codul de mai sus continuă până când toate fișierele și folderele din calea dată au fost acoperite. Când nu mai sunt fișiere / foldere de acoperit, FileName devine un șir nul și bucla se oprește.

Exemplul 4 - Obțineți numele tuturor fișierelor dintr-un folder

Puteți utiliza codul de mai jos pentru a obține numele tuturor fișierelor dintr-un folder / director (și nu numele subdirectoarelor).

Sub GetAllFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \") Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

Acest cod este la fel ca codul utilizat în Exemplul 3, cu o diferență minoră.

În acest cod, nu am specificat vbDirectory în funcția DIR. Când specificați vbDirectory, acesta vă va oferi numele tuturor fișierelor, precum și a folderelor.

Când nu specificați vbDirectory, funcția DIR vă va oferi doar numele fișierelor.

Notă: Dacă doriți să obțineți numele tuturor fișierelor din folderul principal și din sub-foldere, nu puteți utiliza funcția DIR (deoarece nu este recursivă). Pentru a face acest lucru, puteți utiliza Power Query (nu este necesară codarea) sau puteți utiliza obiectul File System în VBA (cu recursivitate).

Exemplul 5 - Obțineți numele tuturor subdirectoarelor dintr-un dosar

Codul de mai jos vă va oferi numele tuturor sub-folderelor din folderul specificat.

Se folosește de Funcția GetAtr în VBA, care ne permite să verificăm dacă numele returnat de funcția DIR este numele unui fișier sau al unui folder / director.

Sub GetSubFolderNames () Dim FileName as String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Do While FileName "" If GetAttr (PathName & FileName) = vbDirectory Then Debug.Print FileName End If FileName = Dir () Loop End Sub

Din nou, folosesc Debug.Print pentru a obține numele în fereastra imediată. Le puteți obține într-o casetă de mesaje sau în Excel (modificând codul în consecință).

Exemplul 6 - Obțineți primul fișier Excel dintr-un folder

Cu funcția DIR, puteți specifica extensia de fișier sau orice sufix / prefix dorit în numele fișierului returnat.

Codul de mai jos va afișa numele primului fișier Excel din folderul Test.

Sub GetFirstExcelFileName () Dim FileName as String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName & "* .xls *") MsgBox FileName End Sub

Rețineți că am folosit * .xls * (semn asterisc pe ambele părți). Acest lucru va asigura că toate versiunile fișierelor Excel sunt verificate (.xls, xlsx, .xlsm, .xlsb).

Exemplul 7 - Obțineți numele tuturor fișierelor Excel într-un folder

Utilizați codul de mai jos pentru a obține numele tuturor fișierelor Excel din folderul Test.

Sub GetAllFileNames () Dim FolderName As String Dim FileName As String FolderName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (FolderName & "* .xls *") Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

În timp ce funcția DIR returnează numai numele primului fișier Excel, deoarece îl apelăm din nou în buclă, acesta trece prin toate fișierele și ne dă numele tuturor fișierelor Excel.

Sper că ați găsit utile acest tutorial și exemplele.

Spuneți-mi părerile dvs. în secțiunea de comentarii.

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

wave wave wave wave wave