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ó:
- * (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.
- ? (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.