VBA má několik užitečných funkcí, které mohou vaši automatizaci v Excelu posunout na další úroveň.
Jednou z takových funkcí je Funkce VBA DIR.
I když to samo o sobě může vypadat jako jednoduchá funkce, která dělá jednu konkrétní věc.
Když to ale zkombinujete s některými dalšími užitečnými prvky kódovacího jazyka VBA, můžete vytvořit výkonné věci (popsané v příkladech dále v tomto tutoriálu).
Co dělá funkce VBA Dir?
Pokud chcete získat název souboru nebo složky pomocí názvu cesty, použijte funkci VBA DIR.
Chcete -li uvést příklad, pokud máte ve složce soubor aplikace Excel, můžete pomocí funkce VBA DIR získat název tohoto souboru aplikace Excel (nebo jiného typu souboru).
Co když chci získat názvy všech souborů aplikace Excel ve složce (nebo všech souborů - ať už je to soubor Excel nebo ne)?
To můžete také!
Když funkci DIR použijete jednou, vrátí první název souboru ve složce. Nyní, pokud chcete získat také názvy druhého, třetího, čtvrtého souboru, můžete znovu použít funkci DIR (popsáno později jako příklad).
Dir vrátí první název souboru, který odpovídá názvu cesty. Chcete -li získat další názvy souborů, které odpovídají názvu cesty, zavolejte Dir opět bez argumentů. Když se neshodují další názvy souborů, Dir vrátí řetězec nulové délky (“”). Zahrnuto v příkladu 3 a 4 dále v tomto kurzu.Syntaxe funkce VBA DIR
Dir [(cesta [, atributy])]
- název cesty: Toto je nepovinný argument. Může to být název souboru, název složky nebo název adresáře. Pokud cesta není nalezena, funkce VBA DIR vrátí řetězec nulové délky (“”)
- atributy: Toto je nepovinný argument. Tento argument můžete použít k určení některých atributů a funkce DIR vrátí názvy souborů na základě těchto atributů. Pokud například chcete seznam všech skrytých souborů nebo souborů jen pro čtení (spolu se soubory bez atributů), musíte to zadat v tomto argumentu.
Atributy dostupné k použití ve funkci VBA DIR (můžete použít jeden nebo více z nich):
Konstantní | Hodnota | Popis |
vbNormal | 0 | (Výchozí) Určuje soubory bez atributů. |
vbReadOnly | 1 | Kromě souborů bez atributů určuje soubory pouze pro čtení. |
vbHidden | 2 | Kromě souborů bez atributů určuje skryté soubory. |
VbSystem | 4 | Kromě souborů bez atributů určuje systémové soubory. Není k dispozici na počítači Macintosh. |
vbVolume | 8 | Určuje označení svazku; pokud je uvedeno jiné přiřazené, vbVolume je ignorován. Není k dispozici na počítači Macintosh. |
vbDirectory | 16 | Kromě souborů bez atributů určuje adresáře nebo složky. |
vbAlias | 64 | Zadaný název souboru je alias. K dispozici pouze na počítačích Macintosh. |
Použití zástupných znaků s funkcí DIR
Pokud pracujete s Windows, můžete ve funkci DIR použít také zástupné znaky.
Všimněte si toho, že je nemůžete použít při práci s VBA v systému Macintosh.
Použití zástupných znaků může být užitečné, když:
- Chcete získat názvy souborů konkrétního typu souboru (například .XLSX nebo .PPTX)
- Pokud máte v příponách souborů konkrétní příponu/předponu a chcete získat názvy těchto souborů/složek/adresářů. Pokud například chcete názvy všech souborů s předponou 2021-2022, můžete to udělat pomocí zástupných znaků.
V aplikaci Excel jsou tři zástupné znaky:
- * (hvězdička) - Představuje libovolný počet znaků. Například, 2019* vám poskytne názvy všech souborů s předponou 2021-2022.
- ? (otazník) - Představuje jeden jediný znak. Například 2021-2022? vám poskytne názvy všech souborů, které začínají na 2021-2022 a má v názvu ještě jeden znak (například 2021-2022A, 2021-2022B, 2021-2022C atd.)
Poznámka: Existuje ještě jeden zástupný znak - vlnovka (~). Protože se moc nepoužívá, přeskočil jsem jeho vysvětlení. V případě zájmu si o tom můžete přečíst více zde.
Funkce VBA DIR - příklady
Nyní se ponořme a podívejme se na několik příkladů použití funkce VBA DIR.
Příklad 1 - Získání názvu souboru z jeho cesty
Když máte cestu k souboru, můžete pomocí funkce DIR z něj získat název souboru.
Níže uvedený kód například vrátí název souboru a zobrazí jej v okně se zprávou.
Sub GetFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub
Výše uvedený kód používá proměnnou ‘Název_souboru’ k uložení názvu souboru vráceného funkcí DIR. Poté pomocí okna se zprávou zobrazí název souboru (jak je uvedeno níže).
A co se stane, když soubor neexistuje?
V takovém případě by funkce DIR vrátila prázdný řetězec.
Níže uvedený kód používá příkaz If Then Else ke kontrole, zda soubor existuje nebo ne. Pokud soubor neexistuje, zobrazí se okno se zprávou s textem „Soubor neexistuje“, v opačném případě název souboru.
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
Příklad 2 - Zkontrolujte, zda adresář existuje nebo ne (a vytvořte, pokud ne)
Níže uvedený kód kontroluje, zda složka „Test“ existuje nebo ne.
Okno se zprávou se používá k zobrazení zprávy v případě, že složka existuje nebo když 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ář neexistuje "End If End Sub
Tento kód můžete dále upřesnit, abyste zkontrolovali, zda složka existuje nebo ne, a pokud ne, můžete k vytvoření této složky použít VBA.
Níže je uveden kód, který používá příponu Funkce MkDir vytvořit složku pro případ, že neexistuje.
Sub CreateDirectory () Dim PathName jako String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & "existuje" Else MkDir PathName MsgBox "Byla vytvořena složka s názvem" & CheckDir End If End Sub
Příklad 3 - Získejte názvy všech souborů a složek v adresáři
Pokud chcete získat seznam všech názvů souborů a složek v adresáři, můžete použít funkci DIR.
Níže uvedený kód uvádí všechny soubory a názvy složek ve složce Test (která se nachází na následující cestě - C: \ Users \ sumit \ Desktop \ Test \).
Používám Debug.Print k zobrazení jmen v okně Immediate. Můžete to také použít k vypsání jmen do pole se zprávou nebo do sloupce v Excelu.
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
Smyčka Do While ve výše uvedeném kódu pokračuje, dokud nejsou pokryty všechny soubory a složky v dané cestě. Pokud již nejsou k dispozici žádné další soubory/složky k zakrytí, název_souboru se stane nulovým řetězcem a smyčka se zastaví.
Příklad 4 - Získejte názvy všech souborů ve složce
Pomocí níže uvedeného kódu můžete získat názvy všech souborů ve složce/adresáři (a nikoli názvy podsložek).
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 stejný jako kód použitý v příkladu 3, s jedním drobným rozdílem.
V tomto kódu jsem nespecifikoval vbDirectory ve funkci DIR. Když zadáte vbDirectory, poskytne vám názvy všech souborů i složek.
Pokud nezadáte vbDirectory, funkce DIR vám poskytne pouze názvy souborů.
Poznámka: Pokud chcete získat názvy všech souborů v hlavní složce a podsložkách, nemůžete použít funkci DIR (protože není rekurzivní). Chcete -li to provést, můžete buď použít Power Query (není nutné žádné kódování), nebo použít objekt systému souborů ve VBA (s rekurzí).
Příklad 5 - Získejte názvy všech podsložek ve složce
Níže uvedený kód vám poskytne názvy všech podsložek v zadané složce.
Používá Funkce GetAtr ve VBA, což nám umožňuje zkontrolovat, zda název vrácený funkcí DIR je názvem souboru nebo složky/adresáře.
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ázev_souboru Konec Pokud Název_souboru = Dir () Konec smyčky Sub
Opět používám Debug.Print k získání jmen v bezprostředním okně. Můžete je získat v okně se zprávou nebo v Excelu (příslušným způsobem upravit kód).
Příklad 6 - Získejte první soubor aplikace Excel ze složky
Pomocí funkce DIR můžete v názvu souboru, který je vrácen, zadat příponu souboru nebo libovolnou požadovanou příponu/předponu.
Níže uvedený kód by zobrazoval název prvního souboru aplikace Excel ve složce 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šimněte si, že jsem použil * .xls * (hvězdička na obou stranách). Tím zajistíte, že budou zkontrolovány všechny verze souborů aplikace Excel (.xls, xlsx, .xlsm, .xlsb).
Příklad 7 - Získejte názvy všech souborů aplikace Excel ve složce
Pomocí níže uvedeného kódu získáte názvy všech souborů aplikace Excel ve složce 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 () Loop End Sub
Zatímco funkce DIR vrací název pouze prvního souboru aplikace Excel, protože jej voláme znovu ve smyčce, prochází všemi soubory a dává nám názvy všech souborů aplikace Excel.
Doufáme, že jste našli tento návod a příklady užitečné.
Dejte mi vědět své myšlenky v sekci komentáře.