VBA DIR funkció - Egyszerű magyarázat példákkal

A VBA néhány hasznos funkcióval rendelkezik, amelyek az Excel automatizálását a következő szintre emelik.

Az egyik ilyen funkció a VBA DIR funkció.

Bár önmagában egyszerű funkciónak tűnhet, amely egy bizonyos dolgot végez.

De ha egyesíti a VBA kódolási nyelv néhány más hasznos elemével, hatékony dolgokat hozhat létre (amelyeket az oktatóanyag későbbi példái tartalmaznak).

Mire jó a VBA Dir funkció?

Használja a VBA DIR funkciót, ha a fájl vagy mappa nevét szeretné elérni az útvonal nevével.

Példának okáért, ha van Excel fájl a mappában, akkor a VBA DIR függvénnyel lekérheti az adott Excel fájl (vagy bármely más típusú fájl) nevét.

Mi a teendő, ha meg akarom kapni a mappában található összes Excel fájl nevét (vagy az összes fájlt - legyen az Excel fájl vagy sem)?

Te is meg tudod csinálni!

Ha egyszer használja a DIR funkciót, visszaadja a első fájlnév egy mappában. Ha most meg akarja kapni a második, harmadik, negyedik fájl nevét is, akkor újra használhatja a DIR funkciót (később példaként).

Dir visszaadja az első fájlnevet, amely megegyezik az útvonalnévvel. Az útvonalnévnek megfelelő további fájlnevekért hívja a hívást Dir ismét érvek nélkül. Ha több fájlnév nem egyezik, Dir nulla hosszúságú karakterláncot („”) ad vissza. Az oktatóanyag későbbi 3. és 4. példája tartalmazza.

A VBA DIR függvény szintaxisa

Irány [(útvonal [, attribútumok])]
  • útvonal: Ez egy opcionális érv. Ez lehet a fájlnév, a mappa neve vagy a könyvtár neve. Ha az útvonal nem található, a VBA DIR függvény nulla hosszúságú karakterláncot ad vissza ("")
  • attribútumok: Ez egy opcionális érv. Ezzel az argumentummal megadhat néhány attribútumot, és a DIR függvény az adott attribútumok alapján adja vissza a fájlneveket. Például, ha az összes rejtett vagy csak olvasható fájl listáját szeretné (az attribútumok nélküli fájlokkal együtt), akkor ezt meg kell adnia ebben az argumentumban.

A VBA DIR funkcióban használható attribútumok (ezek közül egyet vagy többet használhat):

Állandó Érték Leírás
vbNormális 0 (Alapértelmezett) Az attribútumok nélküli fájlokat adja meg.
vbReadOnly 1 Csak olvasható fájlokat ad meg az attribútumok nélküli fájlokon kívül.
vb rejtett 2 Rejtett fájlokat ad meg az attribútumok nélküli fájlok mellett.
VbSystem 4 Rendszerfájlokat ad meg az attribútumok nélküli fájlok mellett. Nem érhető el Macintosh rendszeren.
vbTérfogat 8 Megadja a kötetcímkét; ha más attribútum van megadva, a vbVolume figyelmen kívül marad. Nem érhető el Macintosh rendszeren.
vbKönyvtár 16 Az attribútumok nélküli fájlokon kívül könyvtárakat vagy mappákat ad meg.
vbAlias 64 A megadott fájlnév egy álnév. Csak Macintosh rendszeren érhető el.

Helyettesítő karakterek használata DIR funkcióval

Ha Windows rendszerrel dolgozik, akkor a helyettesítő karaktereket is használhatja a DIR funkcióban.

Ne feledje, hogy ezeket nem használhatja, ha Macintosh VBA -val dolgozik.

A helyettesítő karakterek használata akkor lehet hasznos, ha:

  • Egy adott fájltípus (például .XLSX vagy .PPTX) fájlnevét szeretné megkapni
  • Ha egy adott utótagot/előtagot tartalmaz a fájlnevekben, és meg szeretné kapni ezen fájlok/mappák/könyvtárak nevét. Például, ha a 2021-2022 előtaggal rendelkező összes fájl nevét szeretné megadni, akkor helyettesítő karaktereket használhat.

Az Excelben három helyettesítő karakter található:

  1. * (csillag) - Bármilyen számú karaktert képvisel. Például, 2019* megadja az összes fájl nevét, amelyben a 2021-2022 előtag szerepel.
  2. ? (kérdőjel) - Egyetlen karaktert képvisel. Például 2021–2022? megadja az összes fájl nevét, amely 2021-2022-vel kezdődik, és egy további karakterrel rendelkezik a névben (például 2021-2022A, 2021-2022B, 2021-2022C és így tovább)

Megjegyzés: Van még egy helyettesítő karakter - tilde (~). Mivel nem sokat használják, kihagytam a magyarázatát. Bővebben itt olvashatsz róla, ha érdekel.

VBA DIR függvény - Példák

Most merüljünk el, és nézzünk néhány példát a VBA DIR funkció használatára.

1. példa - A fájlnév lekérése az útvonalából

Ha megvan a fájl elérési útja, akkor a DIR függvény segítségével lekérheti a fájl nevét.

Például az alábbi kód visszaadja a fájl nevét, és megjeleníti azt egy üzenetmezőben.

Sub GetFileNames () Dim Fájlnév mint karakterlánc FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub

A fenti kód a „FileName” változót használja a DIR függvény által visszaadott fájlnév tárolására. Ezután egy üzenetmezőt használ a fájlnév megjelenítésére (az alábbiak szerint).

És mi történik, ha a fájl nem létezik?

Ebben az esetben a DIR függvény üres karakterláncot ad vissza.

Az alábbi kód If If Else utasítást használ annak ellenőrzésére, hogy a fájl létezik -e vagy sem. Ha a fájl nem létezik, akkor egy üzenetdoboz jelenik meg a „Fájl nem létezik” szöveggel, különben a fájl neve.

Sub CheckFileExistence () Dim Fájlnév mint karakterlánc Alatti

2. példa - Ellenőrizze, hogy létezik -e könyvtár vagy sem (és hozza létre, ha nem)

Az alábbi kód ellenőrzi, hogy létezik -e a „Test” mappa.

Az üzenetdoboz egy üzenet megjelenítésére szolgál, ha a mappa létezik, vagy ha nem létezik.

Sub CheckDirectory () Dim PathName Mint String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Ha CheckDir "" Akkor az MsgBox CheckDir & "létezik" Más MsgBox "A könyvtár nem létezik "End If End Sub

Ezt a kódot tovább finomíthatja annak ellenőrzésére, hogy létezik -e a mappa, és ha nem, akkor a VBA segítségével hozhatja létre ezt a mappát.

Az alábbiakban a kódot használjuk MkDir függvény mappát létrehozni, ha nem létezik.

Sub CreateDirectory () Dim PathName String Dim "Létrejött egy mappa a névvel" & CheckDir End If End Sub

3. példa - Szerezze be a könyvtárban található összes fájl és mappa nevét

Ha egy könyvtár összes fájl- és mappanevét szeretné listázni, használhatja a DIR funkciót.

Az alábbi kód felsorolja a Teszt mappa összes fájlját és mappanevét (amely a következő elérési úton található - C: \ Users \ sumit \ Desktop \ Test \).

A Debug.Print programot használom a nevek megjelenítéséhez az Azonnali ablakban. Ezt használhatja a nevek listázására is egy üzenetmezőben vagy egy Excel oszlopban.

Sub GetAllFile & FolderNames () Dim Fájlnév mint karakterlánc FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Do while FileName "" Debug.Print

A fenti kód Do Do ciklusa addig folytatódik, amíg az adott elérési út összes fájlja és mappája le nem fedődik. Ha nincs több fedendő fájl/mappa, a FileName null karakterlánccá válik, és a ciklus leáll.

4. példa - A mappában lévő összes fájl nevének beszerzése

Az alábbi kód segítségével lekérheti a mappa/könyvtár összes fájljának nevét (és nem az almappák nevét).

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

Ez a kód pont olyan, mint a 3. példában használt kód, egy kisebb különbséggel.

Ebben a kódban nem adtam meg vbKönyvtár a DIR funkcióban. A vbDirectory megadásakor az összes fájl és mappa nevét adja meg.

Ha nem adja meg a vbDirectory -t, a DIR funkció csak a fájlok nevét adja meg.

jegyzet: Ha a főmappában és az almappákban található összes fájl nevét szeretné megkapni, nem használhatja a DIR funkciót (mivel nem rekurzív). Ehhez használhatja a Power Query -t (nincs szükség kódolásra), vagy a VBA fájlrendszer -objektumát (rekurzióval).

5. példa - A mappában található összes almappa nevének beszerzése

Az alábbi kód megadja a megadott mappa összes almappájának nevét.

Használja a GetAtr függvény a VBA -ban, amely lehetővé teszi számunkra annak ellenőrzését, hogy a DIR függvény által visszaadott név egy fájl vagy egy mappa/könyvtár neve.

Sub GetSubFolderNames () Dim Fájlnév mint karakterlánc Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Do while FileName "" If GetAttr (PathName & FileName) = vbDirectory then Hibakeresés. Nyomtassa ki a FileName végét, ha a FileName = Dir () Loop End Sub

Ismét a Debug.Print programot használom a nevek közvetlen ablakban való megjelenítéséhez. Ezeket üzenetüzenetben vagy Excelben kaphatja meg (a kód megfelelő módosításával).

6. példa - Szerezze be az első Excel fájlt egy mappából

A DIR funkcióval megadhatja a fájlkiterjesztést vagy bármely utótagot/előtagot, amelyet a visszaadott fájlnévben szeretne.

Az alábbi kód a tesztmappában található első Excel fájl nevét jeleníti meg.

Sub GetFirstExcelFileName () Dim Fájlnév mint karakterlánc Dim PathName Mint String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName & "*.xls*") MsgBox FileName End Sub

Vegye figyelembe, hogy * .xls * -ot (csillagjel mindkét oldalon) használtam. Ez biztosítja, hogy az Excel fájlok összes verziója ellenőrizve legyen (.xls, xlsx, .xlsm, .xlsb).

7. példa - Az összes Excel fájl nevének beolvasása egy mappába

Használja az alábbi kódot a Teszt mappában található összes Excel fájl nevének lekéréséhez.

Sub GetAllFileNames () Dim FolderName String Dim = Irány () Loop End Sub

Míg a DIR függvény csak az első Excel fájl nevét adja vissza, mivel a ciklusban újra meghívjuk, átmegy az összes fájlon, és megadja az összes Excel fájl nevét.

Remélem, hasznosnak találta ezt az oktatóanyagot és a példákat.

Mondja el véleményét a megjegyzések részben.

wave wave wave wave wave