VBA: ssa on hyödyllisiä toimintoja, jotka voivat viedä Excelin automaation seuraavalle tasolle.
Yksi tällainen toiminto on VBA DIR -toiminto.
Vaikka se itsessään voi tuntua yksinkertaiselta toiminnalta, joka tekee tietyn asian.
Mutta kun yhdistät sen joidenkin muiden hyödyllisten VBA -koodauskielen elementtien kanssa, voit luoda tehokkaita juttuja (joita käsitellään myöhemmin tässä opetusohjelmassa).
Mitä VBA -ohjaustoiminto tekee?
Käytä VBA DIR -toimintoa, kun haluat saada tiedoston tai kansion nimen käyttämällä polun nimeä.
Esimerkkinä voidaan mainita, että jos sinulla on Excel -tiedosto kansiossa, voit hakea kyseisen Excel -tiedoston (tai minkä tahansa muun tiedostotyypin) nimen VBA DIR -toiminnon avulla.
Mitä jos haluan saada kaikkien kansion Excel -tiedostojen nimet (tai kaikki tiedostot - olipa se sitten Excel -tiedosto tai ei)?
Sinäkin voit tehdä sen!
Kun käytät DIR -toimintoa kerran, se palauttaa ensimmäinen tiedostonimi kansiossa. Jos haluat nyt myös toisen, kolmannen, neljännen tiedoston nimen, voit käyttää DIR -toimintoa uudelleen (käsitellään myöhemmin esimerkkinä).
Ohjaaja palauttaa ensimmäisen tiedostonimen, joka vastaa polun nimeä. Jos haluat saada muita polun nimeä vastaavia tiedostonimiä, soita Ohjaaja jälleen ilman perusteluja. Kun tiedostojen nimet eivät enää vastaa toisiaan, Ohjaaja palauttaa nollapituisen merkkijonon (“”). Katettu esimerkeissä 3 ja 4 myöhemmin tässä opetusohjelmassa.VBA DIR -toiminnon syntaksi
Ohjaus [(pathname [, attributes])]
- polunimi: Tämä on valinnainen argumentti. Tämä voi olla tiedostonimi, kansion nimi tai hakemiston nimi. Jos polun nimeä ei löydy, VBA DIR -funktio palauttaa nollapituisen merkkijonon (“”)
- määritteet: Tämä on valinnainen argumentti. Tämän argumentin avulla voit määrittää joitain määritteitä, ja DIR -funktio palauttaa kyseisten määritteiden perusteella nimet. Jos haluat esimerkiksi luettelon kaikista piilotetuista tiedostoista tai vain luku-tiedostoista (sekä tiedostoja, joissa ei ole määritteitä), sinun on määritettävä se tässä argumentissa.
VBA DIR -toiminnossa käytettävät määritteet (voit käyttää yhtä tai useampaa näistä):
Jatkuva | Arvo | Kuvaus |
vbNormaali | 0 | (Oletus) Määrittää tiedostot, joissa ei ole määritteitä. |
vbReadOnly | 1 | Määrittää vain luku-tiedostot niiden tiedostojen lisäksi, joilla ei ole määritteitä. |
vbPiilotettu | 2 | Määrittää piilotetut tiedostot niiden tiedostojen lisäksi, joilla ei ole määritteitä. |
VbSystem | 4 | Määrittää järjestelmätiedostot tiedostojen lisäksi, joissa ei ole määritteitä. Ei käytettävissä Macintoshissa. |
vbTilavuus | 8 | Määrittää äänenvoimakkuustarran; jos määritetään jokin muu attribuutti, vbVolume jätetään huomiotta. Ei käytettävissä Macintoshissa. |
vbHakemisto | 16 | Määrittää hakemistot tai kansiot tiedostojen lisäksi, joissa ei ole määritteitä. |
vbAlias | 64 | Määritetty tiedostonimi on alias. Käytettävissä vain Macintoshissa. |
Yleismerkkien käyttäminen DIR -toiminnolla
Jos käytät Windowsia, voit käyttää myös DIR -toiminnon yleismerkkejä.
Huomaa, että et voi käyttää näitä, kun työskentelet VBA: n kanssa Macintoshissa.
Yleismerkkien käyttäminen voi olla hyödyllistä, kun:
- Haluat saada tietyn tiedostotyypin tiedostonimet (kuten .XLSX tai .PPTX)
- Kun tiedostonimissä on tietty jälkiliite/etuliite ja haluat saada näiden tiedostojen/kansioiden/hakemistojen nimet. Jos haluat esimerkiksi kaikkien tiedostojen nimet, joissa on etuliite 2021-2022, voit tehdä sen käyttämällä jokerimerkkejä.
Excelissä on kolme jokerimerkkiä:
- * (tähti) - Se edustaa mitä tahansa määrää merkkejä. Esimerkiksi, 2019* antaa sinulle kaikkien tiedostojen nimet, joissa on etuliite 2021-2022.
- ? (kysymysmerkki) - Se edustaa yhtä hahmoa. Esimerkiksi 2021-2022? antaa sinulle kaikkien tiedostojen nimet, jotka alkavat numerolla 2021-2022 ja joiden nimessä on yksi merkki (kuten 2021-2022A, 2021-2022B, 2021-2022C jne.)
Huomaa: On vielä yksi jokerimerkki - tilde (~). Koska sitä ei käytetä paljon, olen jättänyt sen selityksen väliin. Siitä voit lukea lisää täältä, jos kiinnostaa.
VBA DIR -toiminto - esimerkkejä
Nyt sukellamme ja näemme joitain esimerkkejä VBA DIR -toiminnon käytöstä.
Esimerkki 1 - Tiedostonimen hakeminen polusta
Kun sinulla on tiedoston polku, voit käyttää tiedoston nimeä DIR -toiminnolla.
Esimerkiksi alla oleva koodi palauttaa tiedoston nimen ja näyttää sen viestiruudussa.
Osa GetFileNames () Dim Tiedostonimi merkkijonona FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub
Yllä oleva koodi käyttää muuttujaa "FileName" DIR -funktion palauttaman tiedostonimen tallentamiseen. Sen jälkeen se näyttää viestin ruudulla tiedostonimen näyttämiseksi (kuten alla).
Ja mitä tapahtuu, kun tiedostoa ei ole olemassa?
Siinä tapauksessa DIR -funktio palauttaa tyhjän merkkijonon.
Alla oleva koodi tarkistaa If then Else -lausekkeen, onko tiedosto olemassa vai ei. Jos tiedostoa ei ole, se näyttää viestiruudun, jossa on teksti "Tiedostoa ei ole olemassa", muuten tiedostonimi.
Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") Jos FileName "" Sitten MsgBox FileName Else MsgBox "Tiedostoa ei ole olemassa" End If End Sub
Esimerkki 2 - Tarkista, onko hakemisto olemassa vai ei (ja luo, jos ei)
Alla oleva koodi tarkistaa, onko kansio "Test" olemassa vai ei.
Viestiruutua käytetään viestin näyttämiseen, jos kansio on olemassa tai kun sitä ei ole.
Sub CheckDirectory () Dim PathName Kuten merkkijono Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (Polun nimi, vbDirectory) Jos CheckDir "" Sitten MsgBox CheckDir & "on olemassa" Muu MsgBox "Hakemisto ei ole olemassa "End If End Sub
Voit tarkentaa tätä koodia tarkistaaksesi, onko kansio olemassa vai ei, ja jos ei, voit luoda kansion VBA: n avulla.
Alla on koodi, joka käyttää MkDir -toiminto luoda kansion, jos sitä ei ole.
Sub CreateDirectory () Dim PathName Kuten merkkijono Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (Polun nimi, vbDirectory) Jos CheckDir "" Sitten MsgBox CheckDir & "-kansio on olemassa" Else MkDir PathName MsgBox "Kansio on luotu nimellä" & CheckDir End If End Sub
Esimerkki 3 - Hae hakemiston kaikkien tiedostojen ja kansioiden nimet
Jos haluat saada luettelon kaikista hakemiston tiedostojen ja kansioiden nimistä, voit käyttää DIR -toimintoa.
Alla oleva koodi luettelee kaikki tiedostot ja kansioiden nimet Test -kansiossa (joka sijaitsee seuraavassa polussa - C: \ Users \ sumit \ Desktop \ Test \).
Käytän Debug.Print -ohjelmaa näyttääksesi nimet Välitön -ikkunassa. Voit käyttää tätä myös luetteloidaksesi viestit ruutuun tai Excelin sarakkeeseen.
Sub GetAllFile & FolderNames () Dim Tiedostonimi merkkijonona FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Do while FileName "" Debug.Print FileName FileName = Dir () Loop End Sub
Edellä olevan koodin Do While -silmukka jatkuu, kunnes kaikki annetun polun tiedostot ja kansiot on peitetty. Kun peitettäviä tiedostoja/kansioita ei enää ole, FileName muuttuu tyhjäksi ja silmukka pysähtyy.
Esimerkki 4 - Hae kaikkien kansioiden tiedostojen nimet
Voit käyttää alla olevaa koodia saadaksesi kansion/hakemiston kaikkien tiedostojen nimet (eivätkä alikansioiden nimet).
Sub GetAllFileNames () Dim Tiedostonimi merkkijonona FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \") Do while FileName "" Debug.Print FileName FileName = Dir () Loop End Sub
Tämä koodi on aivan kuten esimerkissä 3 käytetty koodi, mutta siinä on pieni ero.
Tässä koodissa en ole määrittänyt vbHakemisto DIR -toiminnossa. Kun määrität vbDirectory, se antaa kaikkien tiedostojen nimet ja kansiot.
Jos et määritä vbDirectory -asetusta, DIR -toiminto antaa sinulle vain tiedostojen nimet.
Merkintä: Jos haluat saada kaikkien pääkansion ja alikansioiden tiedostojen nimet, et voi käyttää DIR-toimintoa (koska se ei ole rekursiivinen). Voit tehdä tämän käyttämällä joko Power Queryä (koodausta ei tarvita) tai VBA: n tiedostojärjestelmäobjektia (rekursiolla).
Esimerkki 5 - Hae kansion kaikkien alikansioiden nimet
Alla oleva koodi antaisi kaikkien määritetyn kansion alikansioiden nimet.
Se käyttää GetAtr -toiminto VBA: ssa, jonka avulla voimme tarkistaa, onko DIR -funktion palauttama nimi tiedoston tai kansion/hakemiston nimi.
Sub GetSubFolderNames () Dim Tiedostonimi merkkijonona Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Tee samalla FileName "" If GetAttr (PathName & FileName) = vbDirectory then Debug.Print FileName End If FileName = Dir () Loop End Sub
Käytän jälleen Debug.Print -ohjelmaa saadaksesi nimet heti ikkunaan. Voit saada nämä viestiruutuun tai Exceliin (muokkaamalla koodia vastaavasti).
Esimerkki 6 - Hae ensimmäinen Excel -tiedosto kansiosta
DIR -toiminnon avulla voit määrittää palautettavan tiedostonimen tiedostotunnisteen tai haluamasi jälkiliitteen/etuliitteen.
Alla oleva koodi näyttää testikansion ensimmäisen Excel -tiedoston nimen.
Sub GetFirstExcelFileName () Dim Tiedostonimi merkkijonona Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName & "*.xls*") MsgBox FileName End Sub
Huomaa, että olen käyttänyt * .xls * (tähtimerkki molemmin puolin). Tämä varmistaa, että kaikki Excel -tiedostojen versiot tarkistetaan (.xls, xlsx, .xlsm, .xlsb).
Esimerkki 7 - Hae kaikkien kansioiden Excel -tiedostojen nimet
Käytä alla olevaa koodia saadaksesi kaikkien Test -kansion Excel -tiedostojen nimet.
Sub GetAllFileNames () Dim FolderName Kuten merkkijono 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
Vaikka DIR -funktio palauttaa vain ensimmäisen Excel -tiedoston nimen, koska kutsumme sitä uudelleen silmukassa, se käy läpi kaikki tiedostot ja antaa meille kaikkien Excel -tiedostojen nimet.
Toivottavasti tämä opetusohjelma ja esimerkit olivat hyödyllisiä.
Kerro mielipiteesi kommenttiosassa.