Funkcija VBA DIR - enostavna razlaga s primeri

VBA ima nekaj uporabnih funkcij, ki lahko vašo avtomatizacijo v Excelu popeljejo na naslednjo stopnjo.

Ena takih funkcij je VBA DIR funkcija.

Čeprav se lahko samo po sebi zdi preprosta funkcija, ki naredi eno posebno stvar.

Ko pa ga združite z nekaterimi drugimi uporabnimi elementi kodiranja VBA, lahko ustvarite zmogljive stvari (zajete v primerih kasneje v tej vadnici).

Kaj počne funkcija VBA Dir?

Uporabite funkcijo VBA DIR, če želite dobiti ime datoteke ali mape z imenom njihove poti.

Na primer, če imate datoteko Excel v mapi, lahko s funkcijo VBA DIR pridobite ime te datoteke Excel (ali katere koli druge vrste datoteke).

Kaj pa, če želim dobiti imena vseh Excelovih datotek v mapi (ali vseh datotek - naj bo to datoteka Excel ali ne)?

To lahko storite tudi vi!

Ko enkrat uporabite funkcijo DIR, vrne datoteko ime prve datoteke v mapi. Zdaj, če želite dobiti imena tudi druge, tretje, četrte datoteke, lahko znova uporabite funkcijo DIR (obravnavano kasneje kot primer).

Dir vrne prvo ime datoteke, ki se ujema z imenom poti. Če želite pridobiti dodatna imena datotek, ki se ujemajo z imenom poti, pokličite Dir spet brez argumentov. Ko se imena datotek ne ujemajo več, Dir vrne niz ničelne dolžine (“”). Zajete v primerih 3 in 4 kasneje v tej vadnici.

Sintaksa funkcije VBA DIR

Dir [(ime poti [, atributi])]
  • ime poti: To je neobvezen argument. To je lahko ime datoteke, ime mape ali ime imenika. Če imena poti ni mogoče najti, funkcija VBA DIR vrne niz ničelne dolžine (“”)
  • lastnosti: To je neobvezen argument. S tem argumentom lahko podate nekatere atribute in funkcija DIR bo vrnila imena datotek na podlagi teh atributov. Če na primer želite seznam vseh skritih datotek ali datotek samo za branje (skupaj z datotekami brez atributov), ​​morate to podati v tem argumentu.

Atributi, ki so na voljo za uporabo v funkciji VBA DIR (lahko uporabite enega ali več od teh):

Konstantno Vrednost Opis
vbNormalno 0 (Privzeto) Podaja datoteke brez atributov.
vbReadOnly 1 Določa datoteke samo za branje poleg datotek brez atributov.
vbHidden 2 Določa skrite datoteke poleg datotek brez atributov.
VbSystem 4 Določa sistemske datoteke poleg datotek brez atributov. Ni na voljo v sistemu Macintosh.
vbVolume 8 Določa oznako glasnosti; če je podan kateri koli drug atribut, se vbVolume prezre. Ni na voljo v sistemu Macintosh.
vbDirectory 16 Določa imenike ali mape poleg datotek brez atributov.
vbAlias 64 Določeno ime datoteke je vzdevek. Na voljo samo v sistemu Macintosh.

Uporaba nadomestnih znakov s funkcijo DIR

Če delate z operacijskim sistemom Windows, lahko v funkciji DIR uporabite tudi nadomestne znake.

Upoštevajte, da teh ne morete uporabljati pri delu z VBA v sistemu Macintosh.

Uporaba nadomestnih znakov je lahko koristna, če:

  • Želite dobiti imena datotek določene vrste datoteke (na primer .XLSX ali .PPTX)
  • Ko imate v imenih datotek določeno pripono/predpono in želite dobiti imena teh datotek/map/imenikov. Če na primer želite imena vseh datotek s predpono 2021-2022, lahko to storite z nadomestnimi znaki.

V Excelu so trije nadomestni znaki:

  1. * (zvezdica) - Predstavlja poljubno število znakov. Na primer, 2019* bi vam dal imena vseh datotek s predpono 2021-2022.
  2. ? (vprašaj) - Predstavlja en sam znak. Na primer 2021-2022? bi vam dal imena vseh datotek, ki se začnejo z 2021-2022 in imajo v imenu še en znak (na primer 2021-2022A, 2021-2022B, 2021-2022C itd.)

Opomba: Obstaja še en nadomestni znak - tilda (~). Ker se ne uporablja veliko, sem njegovo razlago preskočil. Več o tem si lahko preberete tukaj, če vas zanima.

Funkcija VBA DIR - primeri

Zdaj pa se potopimo in poglejmo nekaj primerov uporabe funkcije VBA DIR.

Primer 1 - Pridobivanje imena datoteke s poti

Ko imate pot do datoteke, lahko s funkcijo DIR dobite ime datoteke iz nje.

Spodnja koda na primer vrne ime datoteke in jo prikaže v polju s sporočilom.

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

Zgornja koda uporablja spremenljivko »Ime datoteke« za shranjevanje imena datoteke, ki ga vrne funkcija DIR. Nato prikaže polje s sporočilom za prikaz imena datoteke (kot je prikazano spodaj).

In kaj se zgodi, ko datoteka ne obstaja?

V tem primeru bi funkcija DIR vrnila prazen niz.

Spodnja koda uporablja stavek If Then Else za preverjanje, ali datoteka obstaja ali ne. Če datoteka ne obstaja, se prikaže polje s sporočilom »Datoteka ne obstaja«, drugače pa ime datoteke.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") If FileName "" Potem MsgBox Ime datoteke Drugo MsgBox "Datoteka ne obstaja" Konec, če se konča Pod

Primer 2 - Preverite, ali imenik obstaja ali ne (in ustvarite, če ne)

Spodnja koda preveri, ali mapa "Test" obstaja ali ne.

Polje za sporočila se uporablja za prikaz sporočila, če mapa obstaja ali kadar ne obstaja.

Pod CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Če CheckDir "" Potem MsgBox CheckDir & "obstaja" Drugače MsgBox "Imenik ne obstaja "End If End Sub

To kodo lahko še izboljšate, da preverite, ali mapa obstaja ali ne, če pa ne, potem lahko z mapo VBA ustvarite to mapo.

Spodaj je koda, ki uporablja Funkcija MkDir ustvariti mapo, če ne obstaja.

Sub CreateDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Če CheckDir "" Potem MsgBox CheckDir & "mapa obstaja" Druga MkDir Ime poti "Ustvarjena je mapa z imenom" & CheckDir End If End Sub

Primer 3 - Pridobite imena vseh datotek in map v imeniku

Če želite dobiti seznam vseh imen datotek in map v imeniku, lahko uporabite funkcijo DIR.

Spodnja koda navaja vse datoteke in imena map v preskusni mapi (ki se nahaja na naslednji poti - C: \ Users \ sumit \ Desktop \ Test \).

Za prikaz imen v oknu Takoj uporabljam Debug.Print. To lahko uporabite tudi za seznam imen v polju za sporočila ali v stolpcu v Excelu.

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

Zanka Do While v zgornji kodi se nadaljuje, dokler niso pokrite vse datoteke in mape na dani poti. Ko ni več datotek/map za pokrivanje, ime datoteke postane ničelni niz in zanka se ustavi.

Primer 4 - Pridobite imena vseh datotek v mapi

S spodnjo kodo lahko dobite imena vseh datotek v mapi/imeniku (in ne imen podmap).

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

Ta koda je podobna kodi, uporabljeni v primeru 3, z eno manjšo razliko.

V tej kodi nisem navedel vbDirectory v funkciji DIR. Ko določite vbDirectory, vam bo dal imena vseh datotek in map.

Če ne podate vbDirectory, vam bo funkcija DIR dala samo imena datotek.

Opomba: Če želite dobiti imena vseh datotek v glavni mapi in podmapah, ne morete uporabiti funkcije DIR (ker ni rekurzivna). Če želite to narediti, lahko uporabite Power Query (kodiranje ni potrebno) ali uporabite objekt datotečnega sistema v VBA (z rekurzijo).

Primer 5 - Pridobite imena vseh podmap v mapi

Spodnja koda bi vam dala imena vseh podmap v določeni mapi.

Uporablja GetAtr funkcija v VBA, ki nam omogoča preverjanje, ali je ime, ki ga vrne funkcija DIR, ime datoteke ali mape/imenika.

Sub GetSubFolderNames () Dim FileName As String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Do While FileName "" Če GetAttr (Ime poti in ime datoteke) = vb Debug.Print FileName End Če je FileName = Dir () Loop End Sub

Ponovno uporabljam Debug.Print, da dobim imena v neposrednem oknu. Te lahko dobite v polju za sporočila ali v Excelu (tako, da ustrezno spremenite kodo).

Primer 6 - Pridobite prvo Excelovo datoteko iz mape

S funkcijo DIR lahko v vrnjeni datoteki podate razširitev datoteke ali katero koli pripono/predpono, ki jo želite.

Spodnja koda bi prikazala ime prve Excelove datoteke v preskusni mapi.

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

Upoštevajte, da sem uporabil * .xls * (znak zvezdice na obeh straneh). To bo zagotovilo preverjanje vseh različic Excelovih datotek (.xls, xlsx, .xlsm, .xlsb).

Primer 7 - Pridobite imena vseh Excelovih datotek v mapo

S spodnjo kodo dobite imena vseh Excelovih datotek v mapi Test.

Sub GetAllFileNames () Zatemni ime mape kot niz Zatemni ime datoteke kot niz ime mape = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (Ime mape & "*.xls*") Naredi Ime datoteke »" Odpravljanje napak Ime datoteke »Ime datoteke« = Dir () Konica zanke Sub

Medtem ko funkcija DIR vrne samo ime prve Excelove datoteke, ker jo ponovno kličemo v zanki, gre skozi vse datoteke in nam daje imena vseh Excelovih datotek.

Upam, da ste našli to vadnico in primere uporabne.

Sporočite mi svoje misli v oddelku za komentarje.

wave wave wave wave wave