VBA DIR funkcija - paprastas paaiškinimas su pavyzdžiais

VBA turi keletą naudingų funkcijų, kurios gali perkelti jūsų „Excel“ automatizavimą į kitą lygį.

Viena iš tokių funkcijų yra VBA DIR funkcija.

Nors tai gali atrodyti kaip paprasta funkcija, atliekanti vieną konkretų dalyką.

Bet kai jūs derinate jį su kai kuriais kitais naudingais VBA kodavimo kalbos elementais, galite sukurti galingų dalykų (aptartų pavyzdžiuose vėliau šioje pamokoje).

Ką veikia VBA režimo funkcija?

Naudokite funkciją VBA DIR, kai norite gauti failo ar aplanko pavadinimą, naudodami jo kelio pavadinimą.

Pavyzdžiui, jei aplanke yra „Excel“ failas, galite naudoti „VBA DIR“ funkciją, kad gautumėte to „Excel“ failo (arba bet kokio kito tipo failo) pavadinimą.

Ką daryti, jei noriu gauti visų aplanke esančių „Excel“ failų pavadinimus (arba visų failų - ar tai būtų „Excel“ failas, ar ne)?

Jūs taip pat galite tai padaryti!

Kai vieną kartą naudojate funkciją DIR, ji grąžina pirmasis failo pavadinimas aplanke. Dabar, jei norite gauti ir antrojo, trečiojo, ketvirtojo failų pavadinimus, galite vėl naudoti funkciją DIR (kaip pavyzdys vėliau).

Rež grąžina pirmąjį failo pavadinimą, atitinkantį kelio pavadinimą. Norėdami gauti papildomų failų pavadinimų, atitinkančių kelio pavadinimą, skambinkite Rež vėl be argumentų. Kai daugiau failų pavadinimai nesutampa, Rež grąžina nulinio ilgio eilutę („“). Aprašytas 3 ir 4 pavyzdžiuose vėliau šioje pamokoje.

VBA DIR funkcijos sintaksė

Rež. [(Kelio pavadinimas [, atributai])]
  • kelio pavadinimas: Tai neprivalomas argumentas. Tai gali būti failo, aplanko arba katalogo pavadinimas. Jei kelio pavadinimas nerastas, funkcija VBA DIR grąžina nulinio ilgio eilutę („“)
  • atributus: Tai neprivalomas argumentas. Šį argumentą galite naudoti norėdami nurodyti kai kuriuos atributus, o funkcija DIR grąžins failų pavadinimus pagal tuos atributus. Pvz., Jei norite visų paslėptų ar tik skaitomų failų (kartu su failais be atributų) sąrašo, turite tai nurodyti šiame argumente.

Atributai, kuriuos galima naudoti naudojant VBA DIR funkciją (galite naudoti vieną ar daugiau iš šių):

Pastovus Vertė apibūdinimas
vbNormalus 0 (Numatytasis) Nurodo failus be atributų.
vbReadOnly 1 Be failų be atributų, nurodomi tik skaitomi failai.
vbSlėptas 2 Be failų be atributų, nurodomi paslėpti failai.
„VbSystem“ 4 Be failų be atributų, nurodomi sistemos failai. Negalima „Macintosh“.
vbTūris 8 Nurodo tūrio etiketę; jei nurodomas kitas atributas, „vbVolume“ nepaisoma. Negalima „Macintosh“.
vbkatalogas 16 Be failų be atributų, nurodomi katalogai ar aplankai.
vbAlias 64 Nurodytas failo pavadinimas yra slapyvardis. Galima tik „Macintosh“.

Naudojant pakaitos simbolius su DIR funkcija

Jei dirbate su „Windows“, DIR funkcijoje galite naudoti ir pakaitos simbolius.

Atminkite, kad negalite jų naudoti dirbdami su VBA „Macintosh“.

Pakaitos simbolių naudojimas gali būti naudingas, kai:

  • Norite gauti tam tikro tipo failų pavadinimus (pvz., .XLSX arba .PPTX)
  • Kai failų pavadinimuose turite konkrečią priesagą/priešdėlį ir norite gauti šių failų/aplankų/katalogų pavadinimus. Pavyzdžiui, jei norite visų failų, kuriuose yra priešdėlis 2021-2022, pavadinimų, galite tai padaryti naudodami pakaitos simbolius.

„Excel“ yra trys pakaitos simboliai:

  1. * (žvaigždutė) - Tai reiškia bet kokį simbolių skaičių. Pavyzdžiui, 2019* suteiks jums visų failų pavadinimus su priešdėliu 2021-2022.
  2. ? (Klaustukas) - Tai vienas simbolis. Pavyzdžiui, 2021–2022 m. suteiks jums visų failų pavadinimus, kurie prasideda 2021–2022 m. ir kurių pavadinime yra dar vienas simbolis (pvz., 2021–2022A, 2021–2022B, 2021–2022C ir pan.)

Pastaba: Yra dar vienas pakaitos simbolis - tilde (~). Kadangi jis nėra daug naudojamas, aš praleidau jo paaiškinimą. Daugiau apie tai galite paskaityti čia, jei susidomėjote.

Funkcija VBA DIR - pavyzdžiai

Dabar pasinerkime ir pamatysime keletą VBA DIR funkcijos naudojimo pavyzdžių.

1 pavyzdys. Failo pavadinimo gavimas iš jo kelio

Kai turite failo kelią, galite naudoti DIR funkciją, kad gautumėte failo pavadinimą.

Pavyzdžiui, žemiau pateiktas kodas grąžina failo pavadinimą ir parodo jį pranešimų laukelyje.

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

Aukščiau pateiktas kodas naudoja kintamąjį „FileName“, kad išsaugotų failo pavadinimą, kurį grąžina funkcija DIR. Tada jis naudoja pranešimų laukelį failo pavadinimui rodyti (kaip parodyta žemiau).

O kas atsitinka, kai failo nėra?

Tokiu atveju funkcija DIR grąžins tuščią eilutę.

Žemiau pateiktas kodas naudoja sakinį „Jei tada kitas“, kad patikrintų, ar failas egzistuoja, ar ne. Jei failo nėra, jame rodomas pranešimų laukelis su tekstu „Failas neegzistuoja“, kitaip - failo pavadinimas.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") Jei FileName "" Tada MsgBox FileName Else MsgBox "Failas neegzistuoja" End If End Sub

2 pavyzdys - patikrinkite, ar katalogas egzistuoja, ar ne (ir sukurkite, jei ne)

Žemiau pateiktas kodas patikrina, ar aplankas „Test“ egzistuoja, ar ne.

Pranešimų dėžutė naudojama pranešimui parodyti, jei aplankas yra arba kai jo nėra.

Sub CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Jei CheckDir "" Tada MsgBox CheckDir & "egzistuoja" Kitas MsgBox "katalogas neegzistuoja „Pabaiga, jei pabaiga

Galite dar patikslinti šį kodą, kad patikrintumėte, ar aplankas egzistuoja, ar ne, o jei ne, tuomet galite naudoti VBA tam aplankui sukurti.

Žemiau yra kodas, kuris naudoja MkDir funkcija sukurti aplanką, jei jo nėra.

Sub CreateDirectory () Dim PathName Kaip String Dim „Sukurtas aplankas pavadinimu“ ir „CheckDir End If End Sub“

3 pavyzdys. Gaukite visų katalogo failų ir aplankų pavadinimus

Jei norite gauti visų katalogo failų ir aplankų pavadinimų sąrašą, galite naudoti funkciją DIR.

Žemiau pateiktame kode išvardyti visi failai ir aplankų pavadinimai, esantys Bandymo aplanke (kuris yra šiuo keliu - C: \ Users \ sumit \ Desktop \ Test \).

Aš naudoju „Debug.Print“, kad parodytumėte pavadinimus nedelsiant esančiame lange. Taip pat galite tai naudoti norėdami išvardyti vardus pranešimų laukelyje arba „Excel“ stulpelyje.

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

Pirmiau nurodyto kodo ciklas „Daryti“ tęsiasi, kol bus padengti visi tam tikro kelio failai ir aplankai. Kai nėra daugiau failų/aplankų, kuriuos būtų galima uždengti, „FileName“ tampa nuline eilute ir ciklas sustoja.

4 pavyzdys. Gaukite visų aplankų failų pavadinimus

Galite naudoti žemiau esantį kodą, kad gautumėte visų aplanko/katalogo failų pavadinimus (o ne poaplankių pavadinimus).

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

Šis kodas yra toks pat kaip 3 pavyzdyje naudojamas kodas, su vienu nedideliu skirtumu.

Šiame kode aš nenurodžiau vbkatalogas DIR funkcijoje. Kai nurodysite „vbDirectory“, jis suteiks jums visų failų ir aplankų pavadinimus.

Kai nenurodysite „vbDirectory“, funkcija DIR suteiks tik failų pavadinimus.

Pastaba: Jei norite gauti visų pagrindiniame aplanke esančių ir poaplankių failų pavadinimus, negalite naudoti funkcijos DIR (nes ji nėra rekursinė). Norėdami tai padaryti, galite naudoti „Power Query“ (nereikia koduoti) arba naudoti failų sistemos objektą VBA (su rekursija).

5 pavyzdys. Gaukite visų aplanko poaplankių pavadinimus

Žemiau pateiktas kodas suteiks jums visų nurodyto aplanko poaplankių pavadinimus.

Jis naudoja „GetAtr“ funkcija VBA, tai leidžia patikrinti, ar funkcija DIR grąžintas vardas yra failo, ar aplanko/katalogo pavadinimas.

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 Derinti. Spausdinti FileName End, jei FileName = Dir () Loop End Sub

Vėlgi, aš naudoju „Debug.Print“, kad gautumėte pavadinimus tiesioginiame lange. Tai galite gauti pranešimų laukelyje arba „Excel“ (atitinkamai pakeisdami kodą).

6 pavyzdys. Gaukite pirmąjį „Excel“ failą iš aplanko

Naudodami funkciją DIR, grąžinamame failo pavadinime galite nurodyti failo plėtinį arba bet kokią priesagą/priešdėlį.

Žemiau pateiktas kodas parodys pirmojo „Excel“ failo pavadinimą aplanke „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

Atkreipkite dėmesį, kad naudojau * .xls * (žvaigždutė abiejose pusėse). Tai užtikrins, kad bus patikrintos visos „Excel“ failų versijos (.xls, xlsx, .xlsm, .xlsb).

7 pavyzdys. Gaukite visų „Excel“ failų pavadinimus aplanke

Naudokite žemiau esantį kodą, kad gautumėte visų „Excel“ failų pavadinimus aplanke „Test“.

Sub GetAllFileNames () Dim FolderName Kaip String Dim = Dir () Loop End Sub

Funkcija DIR grąžina tik pirmojo „Excel“ failo pavadinimą, nes mes jį dar kartą šaukiame cikle, ji eina per visus failus ir pateikia mums visų „Excel“ failų pavadinimus.

Tikimės, kad ši pamoka ir pavyzdžiai jums buvo naudingi.

Leiskite man žinoti savo mintis komentarų skiltyje.

wave wave wave wave wave