Funkcia VBA DIR - jednoduché vysvetlenie s príkladmi

VBA má niekoľko užitočných funkcií, ktoré môžu vašu automatizáciu v programe Excel posunúť na ďalšiu úroveň.

Jednou z takýchto funkcií je Funkcia VBA DIR.

Aj keď sa to zdá samo o sebe, môže to vyzerať ako jednoduchá funkcia, ktorá robí jednu konkrétnu vec.

Ale keď to skombinujete s niektorými ďalšími užitočnými prvkami kódovacieho jazyka VBA, môžete vytvoriť výkonné veci (popísané v príkladoch ďalej v tomto návode).

Čo robí funkcia VBA Dir?

Ak chcete získať názov súboru alebo priečinka pomocou názvu cesty, použite funkciu VBA DIR.

Ako príklad uvádzame, že ak máte v priečinku súbor programu Excel, môžete na získanie názvu tohto súboru programu Excel (alebo akéhokoľvek iného typu súboru) použiť funkciu VBA DIR.

Čo keď chcem získať názvy všetkých súborov programu Excel v priečinku (alebo všetkých súborov - či už ide o súbor Excel alebo nie)?

Dokážeš to aj ty!

Keď funkciu DIR použijete raz, vráti sa prvý názov súboru v priečinku. Teraz, ak chcete získať aj názvy druhého, tretieho, štvrtého súboru, môžete znova použiť funkciu DIR (popísaná neskôr ako príklad).

Dir vráti prvý názov súboru, ktorý sa zhoduje s názvom cesty. Ak chcete získať ďalšie názvy súborov, ktoré sa zhodujú s názvom cesty, zavolajte Dir opäť bez argumentov. Keď sa viac nezhodujú názvy súborov, Dir vráti reťazec s nulovou dĺžkou (“”). Zahrnuté v príkladoch 3 a 4 neskôr v tomto návode.

Syntax funkcie VBA DIR

Dir [(cesta [, atribúty])]
  • názov cesty: Toto je voliteľný argument. Môže to byť názov súboru, názov priečinka alebo názov adresára. Ak sa cesta nenájde, funkcia VBA DIR vráti reťazec nulovej dĺžky („“)
  • atribúty: Toto je voliteľný argument. Tento argument môžete použiť na zadanie niektorých atribútov a funkcia DIR vráti názvy súborov na základe týchto atribútov. Ak napríklad chcete zoznam všetkých skrytých súborov alebo súborov iba na čítanie (spolu so súbormi bez atribútov), ​​musíte to v tomto argumente špecifikovať.

Atribúty dostupné na použitie vo funkcii VBA DIR (môžete použiť jeden alebo viac z nich):

Konštantný Hodnota Popis
vbNormálne 0 (Predvolené) Špecifikuje súbory bez atribútov.
vbReadOnly 1 Okrem súborov bez atribútov určuje aj súbory iba na čítanie.
vbSkryté 2 Špecifikuje skryté súbory okrem súborov bez atribútov.
VbSystem 4 Určuje systémové súbory okrem súborov bez atribútov. Nie je k dispozícii na počítačoch Macintosh.
vbHlas 8 Špecifikuje štítok objemu; ak je zadaný iný priradený prvok, vbVolume sa ignoruje. Nie je k dispozícii na počítačoch Macintosh.
vbDirectory 16 Špecifikuje adresáre alebo priečinky okrem súborov bez atribútov.
vbAlias 64 Zadaný názov súboru je alias. K dispozícii iba na počítačoch Macintosh.

Použitie zástupných znakov s funkciou DIR

Ak pracujete s operačným systémom Windows, môžete vo funkcii DIR použiť aj zástupné znaky.

Všimnite si toho, že ich nemôžete použiť pri práci s VBA v systéme Macintosh.

Použitie zástupných znakov môže byť užitočné v týchto prípadoch:

  • Chcete získať názvy súborov konkrétneho typu súboru (napríklad .XLSX alebo .PPTX)
  • Keď máte v názvoch súborov konkrétnu príponu/predponu a chcete získať názvy týchto súborov/priečinkov/adresárov. Ak napríklad chcete názvy všetkých súborov s predponou 2021-2022, môžete to urobiť pomocou zástupných znakov.

V programe Excel sú tri zástupné znaky:

  1. * (hviezdička) - Predstavuje ľubovoľný počet znakov. Napríklad, 2019* vám poskytne názvy všetkých súborov s predponou 2021-2022.
  2. ? (otáznik) - Predstavuje jeden jediný znak. Napríklad 2021-2022? dalo by vám názvy všetkých súborov, ktoré začínajú na 2021-2022 a má v názve ešte jeden znak (napríklad 2021-2022A, 2021-2022B, 2021-2022C atď.)

Poznámka: Existuje ešte jeden zástupný znak - vlnovka (~). Pretože sa veľmi nepoužíva, preskočil som jeho vysvetlenie. V prípade záujmu si o tom môžete prečítať viac tu.

Funkcia VBA DIR - príklady

Teraz sa ponoríme a uvidíme niekoľko príkladov použitia funkcie VBA DIR.

Príklad 1 - Získanie názvu súboru z jeho cesty

Keď máte cestu k súboru, môžete použiť funkciu DIR na získanie názvu súboru z neho.

Nasledujúci kód napríklad vráti názov súboru a zobrazí ho v okne so správou.

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

Vyššie uvedený kód používa premennú ‘FileName’ na uloženie názvu súboru, ktorý je vrátený funkciou DIR. Potom pomocou poľa so správou zobrazí názov súboru (ako je uvedené nižšie).

A čo sa stane, keď súbor neexistuje?

V takom prípade funkcia DIR vráti prázdny reťazec.

Nasledujúci kód používa príkaz If Then Else na kontrolu, či súbor existuje alebo nie. Ak súbor neexistuje, zobrazí sa okno so správou s textom „Súbor neexistuje“, v opačnom prípade sa zobrazí názov súboru.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") If FileName "" Then MsgBox FileName Else MsgBox "File doesn't exist" End if End Sub

Príklad 2 - Skontrolujte, či adresár existuje alebo nie (a vytvorte, ak nie)

Nasledujúci kód kontroluje, či priečinok „Test“ existuje alebo nie.

Okno so správou sa používa na zobrazenie správy v prípade, že priečinok existuje alebo keď neexistuje.

Sub CheckDirectory () Dim PathName as String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & "existuje" Else MsgBox "Adresár neexistuje „End If End Sub

Tento kód môžete ďalej upresniť, aby ste zistili, či priečinok existuje alebo nie, a ak nie, môžete na vytvorenie priečinka použiť VBA.

Nasleduje kód, ktorý používa príponu Funkcia MkDir vytvoriť priečinok pre prípad, že neexistuje.

Sub CreateDirectory () Dim PathName as String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & "priečinok existuje" Else MkDir PathName MsgBox "Bol vytvorený priečinok s názvom" & CheckDir End If End Sub

Príklad 3 - Získať názvy všetkých súborov a priečinkov v adresári

Ak chcete získať zoznam všetkých názvov súborov a priečinkov v adresári, môžete použiť funkciu DIR.

Nasledujúci kód uvádza všetky názvy súborov a priečinkov v priečinku Test (ktorý sa nachádza na nasledujúcej ceste - C: \ Users \ sumit \ Desktop \ Test \).

Na zobrazenie mien v okne Okamžité používam Debug.Print. Môžete to tiež použiť na vypísanie mien do poľa so správou alebo do stĺpca v programe Excel.

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

Cyklus Do While vo vyššie uvedenom kóde pokračuje, kým nie sú pokryté všetky súbory a priečinky na danej ceste. Keď už nie sú k dispozícii žiadne ďalšie súbory/priečinky, z ktorých sa má názov pokrývať, stane sa z nulového reťazca a slučka sa zastaví.

Príklad 4 - Získať názvy všetkých súborov v priečinku

Nasledujúci kód môžete použiť na získanie názvov všetkých súborov v priečinku/adresári (a nie názvov podpriečinkov).

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

Tento kód je rovnaký ako kód použitý v príklade 3, s jedným malým rozdielom.

V tomto kóde som nešpecifikoval vbDirectory vo funkcii DIR. Keď zadáte vbDirectory, poskytne vám názvy všetkých súborov a priečinkov.

Ak nezadáte vbDirectory, funkcia DIR vám poskytne iba názvy súborov.

Poznámka:: Ak chcete získať názvy všetkých súborov v hlavnom priečinku a podpriečinkoch, nemôžete používať funkciu DIR (pretože nie je rekurzívna). Na tento účel môžete použiť Power Query (nie je potrebné žiadne kódovanie) alebo použiť objekt systému súborov vo VBA (s rekurziou).

Príklad 5 - Zistite názvy všetkých podpriečinkov v priečinku

Nasledujúci kód vám poskytne názvy všetkých podpriečinkov v zadanom priečinku.

Využíva Funkcia GetAtr vo VBA, ktorý nám umožňuje skontrolovať, či je názov vrátený funkciou DIR názvom súboru alebo priečinka/adresára.

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 Debug.Print Názov súboru Koniec, ak Názov súboru = Dir () Koniec slučky Sub

Opäť používam Debug.Print na získanie mien v bezprostrednom okne. Môžete ich získať v schránke so správou alebo v Exceli (príslušným upravením kódu).

Príklad 6 - Získajte prvý súbor programu Excel z priečinka

Pomocou funkcie DIR môžete v názve vráteného súboru určiť príponu súboru alebo ľubovoľnú požadovanú príponu/predponu.

Nasledujúci kód by zobrazil názov prvého súboru programu Excel v priečinku 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

Všimnite si toho, že som použil * .xls * (znak hviezdičky na oboch stranách). Tým sa zabezpečí kontrola všetkých verzií súborov programu Excel (.xls, xlsx, .xlsm, .xlsb).

Príklad 7 - Získať názvy všetkých súborov programu Excel do priečinka

Nasledujúci kód použite na získanie názvov všetkých súborov programu Excel v priečinku Test.

Sub GetAllFileNames () Dim FolderName As String Dim FileName as String FolderName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (FolderName & "*.xls*") Do While FileName "" Debug.Print FileName FileName = Dir () Koniec slučky Sub

Aj keď funkcia DIR vracia názov iba prvého súboru programu Excel, pretože ho znova voláme v slučke, prechádza všetkými súbormi a dáva nám názvy všetkých súborov programu Excel.

Dúfam, že ste našli tento návod a príklady užitočné.

Dajte mi vedieť svoje nápady v sekcii komentárov.

Vám pomôže rozvoju miesta, zdieľať stránku s priateľmi

wave wave wave wave wave