Funktsioon VBA DIR - lihtne selgitus näidetega

VBA -l on mõned kasulikud funktsioonid, mis võivad viia teie Excelis automatiseerimise järgmisele tasemele.

Üks selline funktsioon on VBA DIR funktsioon.

Kuigi see iseenesest võib tunduda lihtne funktsioon, mis teeb ühte konkreetset asja.

Kuid kui ühendate selle mõne muu VBA kodeerimiskeele kasuliku elemendiga, saate luua võimsaid asju (mida käsitletakse selle õpetuse hilisemates näidetes).

Mida teeb VBA juhtimisfunktsioon?

Kasutage funktsiooni VBA DIR, kui soovite saada faili või kausta nime, kasutades selle tee nime.

Kui näitena tuua, kui teil on kaustas Exceli fail, saate selle Exceli faili (või mis tahes muud tüüpi faili) nime saamiseks kasutada funktsiooni VBA DIR.

Mis siis, kui tahan saada kõigi kaustas olevate Exceli failide (või kõigi failide - olgu see siis Exceli fail või mitte) nimed?

Saate ka seda teha!

Kui kasutate funktsiooni DIR üks kord, tagastab see esimene faili nimi kaustas. Nüüd, kui soovite saada ka teise, kolmanda, neljanda faili nimesid, saate uuesti kasutada funktsiooni DIR (näitena hiljem).

Rež tagastab esimese failinime, mis vastab tee nimele. Tee nimele vastavate täiendavate failinimede hankimiseks helistage Rež jälle ilma argumentideta. Kui enam failinimesid ei sobi, Rež tagastab nullpikkuse stringi (“”). Kaetud näites 3 ja 4 hiljem selles õpetuses.

Funktsiooni VBA DIR süntaks

Rež [(tee nimi [, atribuudid])]]
  • tee nimi: See on valikuline argument. See võib olla faili nimi, kausta nimi või kataloogi nimi. Kui tee nime ei leita, tagastab funktsioon VBA DIR nullpikkuse stringi (“”)
  • atribuudid: See on valikuline argument. Selle argumendi abil saate määrata mõned atribuudid ja funktsioon DIR tagastab nende atribuutide põhjal failinimed. Näiteks kui soovite kõigi peidetud või kirjutuskaitstud failide loendi (koos atribuutideta failidega), peate selle selle argumendi puhul täpsustama.

Funktsioonis VBA DIR kasutatavad atribuudid (saate kasutada ühte või mitut neist):

Pidev Väärtus Kirjeldus
vbNormaalne 0 (Vaikimisi) Määrab atribuutideta failid.
vbReadOnly 1 Määrab kirjutuskaitstud failid lisaks atribuutideta failidele.
vbPelatud 2 Määrab peidetud failid lisaks failidele, millel pole atribuute.
VbSystem 4 Määrab süsteemifailid lisaks atribuutideta failidele. Pole Macintoshis saadaval.
vbmaht 8 Määrab helitugevuse sildi; kui on määratud mõni muu atribuut, ignoreeritakse vbVolume. Pole Macintoshis saadaval.
vbKataloog 16 Määrab kataloogid või kaustad lisaks atribuutideta failidele.
vbAlias 64 Määratud failinimi on varjunimi. Saadaval ainult Macintoshis.

DIR -funktsiooniga metamärkide kasutamine

Kui töötate Windowsiga, saate DIR -funktsioonis kasutada ka metamärke.

Pange tähele, et neid ei saa kasutada Macintoshi VBA -ga töötamisel.

Metamärkide kasutamine võib olla kasulik järgmistel juhtudel.

  • Soovite hankida teatud tüüpi failinimesid (nt .XLSX või .PPTX)
  • Kui failinimedes on konkreetne järelliide/eesliide ja soovite saada nende failide/kaustade/kataloogide nimesid. Näiteks kui soovite kõigi failide nimesid, mille eesliide on 2021-2022, saate seda teha metamärkide abil.

Excelis on kolm metamärki:

  1. * (tärn) - See tähistab suvalist arvu tähemärke. Näiteks, 2019* annaks teile kõigi failide nimed, mille eesliide on 2021-2022.
  2. ? (küsimärk) - See kujutab endast ühte tegelast. Näiteks 2021–2022? annaks teile kõigi failide nimed, mis algavad tähega 2021-2022 ja mille nimes on veel üks märk (näiteks 2021-2022A, 2021-2022B, 2021-2022C jne)

Märkus. On veel üks metamärk - tilde (~). Kuna seda ei kasutata palju, jätsin selle selgituse vahele. Huvi korral saate sellest lähemalt lugeda siit.

Funktsioon VBA DIR - näited

Nüüd sukeldume ja vaatame mõningaid näiteid funktsiooni VBA DIR kasutamisest.

Näide 1 - failinime hankimine teelt

Kui teil on faili tee, saate faili nime saamiseks sealt kasutada funktsiooni DIR.

Näiteks tagastab allolev kood faili nime ja kuvab selle sõnumikastis.

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

Ülaltoodud kood kasutab muutujat „FileName”, et salvestada DIR -funktsiooni tagastatud failinimi. Seejärel kasutab see failinime kuvamiseks sõnumikast (nagu allpool näidatud).

Ja mis juhtub, kui faili pole olemas?

Sel juhul tagastab funktsioon DIR tühja stringi.

Allolev kood kasutab lauset If Then Else, et kontrollida, kas fail on olemas või mitte. Kui faili pole olemas, kuvatakse sõnumikast tekstiga „Faili ei eksisteeri”, vastasel juhul kuvatakse faili nimi.

Sub CheckFileExistence () Dim FileName nagu string FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") Kui FileName "" Siis MsgBox FileName Muu MsgBox "Faili pole olemas" End If End Sub

Näide 2 - kontrollige, kas kataloog on olemas või mitte (ja looge, kui seda pole)

Allolev kood kontrollib, kas kaust „Test” on olemas või mitte.

Sõnumiboksi kasutatakse sõnumi kuvamiseks juhuks, kui kaust on olemas või kui seda pole.

Alam CheckDirectory () Dim PathName Stringina Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Kui CheckDir "" Siis on MsgBox CheckDir & "olemas" Muu MsgBox "Kataloog pole olemas "End If End Sub

Saate seda koodi veelgi täpsustada, et kontrollida, kas kaust on olemas või mitte, ja kui seda pole, saate selle kausta loomiseks kasutada VBA -d.

Allpool on kood, mis kasutab Funktsioon MkDir kausta loomiseks juhuks, kui seda pole olemas.

Alam CreateDirectory () Dim PathName kui string Dim CheckDir kui string PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Kui CheckDir "" Siis on kaust MsgBox CheckDir & "olemas" Else MkDir PathName MsgBox "Kaust on loodud nimega" & CheckDir End If End Sub

Näide 3 - hankige kataloogi kõigi failide ja kaustade nimed

Kui soovite saada kataloogi kõigi failide ja kaustade nimede loendi, saate kasutada funktsiooni DIR.

Allolev kood loetleb kõik failid ja kaustade nimed Test -kaustas (mis asub järgmisel teel - C: \ Users \ sumit \ Desktop \ Test \).

Ma kasutan Debug.Printit, et kuvada nimed vahetu aknas. Seda saate kasutada ka nimede loetlemiseks sõnumikasti või Exceli veergu.

Sub GetAllFile & FolderNames () Dim FileName nagu string

Ülaltoodud koodi Do Do tsükkel jätkub seni, kuni kõik antud tee failid ja kaustad on kaetud. Kui katmiseks pole enam faile/kaustu, muutub failinimi nullstringiks ja tsükkel peatub.

Näide 4 - hankige kausta kõigi failide nimed

Alloleva koodi abil saate hankida kausta/kataloogi kõigi failide nimed (mitte alamkaustade nimed).

Alam GetAllFileNames () Dim FileName nagu string FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \") Do while FileName "" Debug.Print FileName FileName = Dire

See kood on täpselt nagu näites 3 kasutatud kood, ühe väikese erinevusega.

Selles koodis pole ma täpsustanud vbKataloog funktsioonis DIR. Kui määrate vbDirectory, annab see teile kõigi failide ja kaustade nimed.

Kui te ei määra vbDirectory, annab funktsioon DIR teile ainult failide nimed.

Märge: Kui soovite saada kõigi põhikausta ja alamkaustade failide nimed, ei saa te funktsiooni DIR kasutada (kuna see pole rekursiivne). Selleks võite kasutada kas Power Query'i (pole vaja kodeerida) või kasutada failisüsteemi objekti VBA -s (rekursiooniga).

Näide 5 - Hankige kausta kõigi alamkaustade nimed

Allolev kood annaks teile kõigi määratud kausta alamkaustade nimed.

See kasutab Funktsioon GetAtr VBA -s, mis võimaldab meil kontrollida, kas funktsiooni DIR tagastatud nimi on faili või kausta/kataloogi nimi.

Alam GetSubFolderNames () Dim FileName kui string Dim PathName nagu string PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Do while FileName "" If GetAttr (PathName & FileName) = vbDirectory then Silumine. Printige failinime lõpp, kui FileName = Dir () Loop End Sub

Jällegi kasutan Debug.Print, et saada nimed vahetu aknasse. Neid saate sõnumikastist või Excelist (koodi vastavalt muutes).

Näide 6 - hankige esimene Exceli fail kaustast

Funktsiooniga DIR saate tagastatavas failinimes määrata faililaiendi või sufiksi/eesliite.

Allolev kood kuvab testkaustas esimese Exceli faili nime.

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

Pange tähele, et olen kasutanud * .xls * (tärn mõlemal küljel). See tagab, et kõik Exceli failide versioonid (.xls, xlsx, .xlsm, .xlsb) on kontrollitud.

Näide 7 - hankige kausta kõigi Exceli failide nimed

Kasutage allolevat koodi, et saada kõigi testkaustas olevate Exceli failide nimed.

Sub GetAllFileNames () Dim FolderName Stringina 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

Funktsioon DIR tagastab ainult esimese Exceli faili nime, kuna me kutsume seda uuesti silmusesse, läbib see kõik failid ja annab meile kõigi Exceli failide nimed.

Loodetavasti leidsite sellest õpetusest ja näidetest kasu.

Andke mulle oma mõtted kommentaaride jaotises teada.

wave wave wave wave wave