VBA ir dažas noderīgas funkcijas, kas var paaugstināt jūsu automatizāciju programmā Excel uz nākamo līmeni.
Viena no šādām funkcijām ir VBA DIR funkcija.
Lai gan tas pats par sevi var šķist vienkārša funkcija, kas veic vienu konkrētu lietu.
Bet, apvienojot to ar dažiem citiem noderīgiem VBA kodēšanas valodas elementiem, varat izveidot jaudīgu saturu (apskatīts šīs apmācības piemēros).
Ko dara VBA režijas funkcija?
Izmantojiet funkciju VBA DIR, ja vēlaties iegūt faila vai mapes nosaukumu, izmantojot tā ceļa nosaukumu.
Piemēram, ja mapē ir Excel fails, varat izmantot funkciju VBA DIR, lai iegūtu šī Excel faila (vai cita veida faila) nosaukumu.
Ko darīt, ja vēlos iegūt visu mapē esošo Excel failu nosaukumus (vai visus failus - vai nu Excel failu, vai ne)?
Arī tu to vari!
Vienreiz lietojot funkciju DIR, tā atgriež pirmā faila nosaukums mapē. Tagad, ja vēlaties iegūt arī otrā, trešā, ceturtā faila nosaukumu, varat vēlreiz izmantot funkciju DIR (kā piemērs aplūkota vēlāk).
Rež atgriež pirmo faila nosaukumu, kas atbilst ceļa nosaukumam. Lai iegūtu papildu failu nosaukumus, kas atbilst ceļa nosaukumam, zvaniet Rež atkal bez argumentiem. Ja vairs neatbilst failu nosaukumi, Rež atgriež nulles garuma virkni (“”). Tika apskatīts 3. un 4. piemērā vēlāk šajā apmācībā.Funkcijas VBA DIR sintakse
Rež. [(Ceļa nosaukums [, atribūti])]
- ceļa vārds: Šis ir fakultatīvs arguments. Tas var būt faila nosaukums, mapes nosaukums vai direktorija nosaukums. Ja ceļa nosaukums netiek atrasts, funkcija VBA DIR atgriež nulles garuma virkni (“”)
- atribūti: Šis ir fakultatīvs arguments. Šo argumentu varat izmantot, lai norādītu dažus atribūtus, un funkcija DIR atgriež failu nosaukumus, pamatojoties uz šiem atribūtiem. Piemēram, ja vēlaties visu slēpto vai tikai lasāmo failu sarakstu (kopā ar failiem bez atribūtiem), tas ir jānorāda šajā argumentā.
Funkcijā VBA DIR izmantojamie atribūti (varat izmantot vienu vai vairākus no šiem):
Pastāvīga | Vērtība | Apraksts |
vbNormāli | 0 | (Noklusējums) Norāda failus bez atribūtiem. |
vbReadOnly | 1 | Papildus failiem bez atribūtiem norāda tikai lasāmus failus. |
vbSlēpts | 2 | Norāda slēptos failus papildus failiem bez atribūtiem. |
VbSystem | 4 | Norāda sistēmas failus papildus failiem bez atribūtiem. Nav pieejams Macintosh. |
vbSējums | 8 | Norāda apjoma etiķeti; ja ir norādīts kāds cits atribūts, vbVolume tiek ignorēts. Nav pieejams Macintosh. |
vbDirectory | 16 | Norāda direktorijus vai mapes papildus failiem bez atribūtiem. |
vbAlias | 64 | Norādītais faila nosaukums ir aizstājvārds. Pieejams tikai Macintosh. |
Izmantojot aizstājējzīmes ar DIR funkciju
Ja strādājat ar Windows, DIR funkcijā varat izmantot arī aizstājējzīmes.
Ņemiet vērā, ka tos nevar izmantot, strādājot ar VBA operētājsistēmā Macintosh.
Aizstājējzīmju izmantošana var būt noderīga, ja:
- Jūs vēlaties iegūt konkrēta faila tipa failu nosaukumus (piemēram, .XLSX vai .PPTX)
- Ja failu nosaukumos ir noteikts sufikss/prefikss un vēlaties iegūt šo failu/mapju/direktoriju nosaukumus. Piemēram, ja vēlaties visu to failu nosaukumus, kuros ir prefikss 2021-2022, varat to izdarīt, izmantojot aizstājējzīmes.
Programmā Excel ir trīs aizstājējzīmes:
- * (zvaigznīte) - Tas apzīmē jebkuru rakstzīmju skaitu. Piemēram, 2019* dotu jums visu failu nosaukumus ar prefiksu 2021-2022.
- ? (jautājuma zīme) - Tas attēlo vienu rakstzīmi. Piemēram, 2021. – 2022. dotu jums visu to failu nosaukumus, kas sākas ar 2021-2022 un kuru nosaukumā ir vēl viena rakstzīme (piemēram, 2021-2022A, 2021-2022B, 2021-2022C utt.)
Piezīme. Ir vēl viena aizstājējzīme - tilde (~). Tā kā tas netiek izmantots daudz, esmu izlaidis tā skaidrojumu. Vairāk par to varat izlasīt šeit, ja interesē.
Funkcija VBA DIR - piemēri
Tagad ienirsim un apskatīsim dažus VBA DIR funkcijas izmantošanas piemērus.
1. piemērs - faila nosaukuma iegūšana no tā ceļa
Ja jums ir faila ceļš, varat izmantot funkciju DIR, lai no tā iegūtu faila nosaukumu.
Piemēram, zemāk esošais kods atgriež faila nosaukumu un parāda to ziņojumu lodziņā.
Sub GetFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub
Iepriekš minētais kods izmanto mainīgo “FileName”, lai saglabātu faila nosaukumu, ko atgriež funkcija DIR. Pēc tam tas izmanto ziņojumu lodziņu, lai parādītu faila nosaukumu (kā parādīts zemāk).
Un kas notiek, ja fails neeksistē?
Tādā gadījumā funkcija DIR atgriezīs tukšu virkni.
Zemāk esošais kods izmanto paziņojumu Ja tad cits, lai pārbaudītu, vai fails pastāv vai ne. Ja fails neeksistē, tas parāda ziņojumu lodziņu ar tekstu “Fails nepastāv”, pretējā gadījumā tas parāda faila nosaukumu.
Sub CheckFileExistence () Dim Faila nosaukums kā virkne Sub
2. piemērs - pārbaudiet, vai direktorijs pastāv vai nav (un izveidojiet, ja nav)
Zemāk esošais kods pārbauda, vai mape “Test” pastāv vai ne.
Ziņojumu lodziņš tiek izmantots, lai parādītu ziņojumu gadījumā, ja mape pastāv vai ja tās nav.
Sub CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Ja CheckDir "" Tad MsgBox CheckDir & "pastāv" Cits MsgBox "Katalogs nepastāv "Beigt, ja beigt apakš
Jūs varat vēl vairāk precizēt šo kodu, lai pārbaudītu, vai mape pastāv vai nav, un, ja tā nav, tad varat izmantot VBA, lai izveidotu šo mapi.
Zemāk ir kods, kas izmanto MkDir funkcija lai izveidotu mapi, ja tā neeksistē.
Sub CreateDirectory () Dim PathName kā virkne Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) Ja CheckDir "" Tad mape MsgBox CheckDir & "pastāv" Else MkDir PathName MsgBox "Ir izveidota mape ar nosaukumu" & CheckDir End If End Sub
3. piemērs - iegūstiet visu direktoriju failu un mapju nosaukumus
Ja vēlaties iegūt visu direktorijā esošo failu un mapju nosaukumu sarakstu, varat izmantot funkciju DIR.
Zemāk esošajā kodā ir uzskaitīti visi faili un mapju nosaukumi mapē Test (kas atrodas šādā ceļā - C: \ Users \ sumit \ Desktop \ Test \).
Es izmantoju Debug.Print, lai parādītu vārdus tūlītējā logā. Varat arī to izmantot, lai uzskaitītu vārdus ziņojumu lodziņā vai kolonnā programmā Excel.
Apakš GetAllFile & FolderNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Darīt, kamēr FileName "" Debug.Print FileName FileName = Dir () Loop End Sub
Iepriekš minētā koda Do Do cilpa turpinās, līdz tiek pārklāti visi faili un mapes norādītajā ceļā. Ja vairs nav failu/mapju, ko segt, FileName kļūst par nulles virkni un cilpa apstājas.
4. piemērs. Iegūstiet visu mapē esošo failu nosaukumus
Varat izmantot zemāk esošo kodu, lai iegūtu visu mapē/direktorijā esošo failu nosaukumus (nevis apakšmapes nosaukumus).
Apakš GetAllFileNames () Dim Faila nosaukums kā virkne
Šis kods ir tāds pats kā 3. piemērā izmantotais kods ar nelielu atšķirību.
Šajā kodā es neesmu norādījis vbDirectory funkcijā DIR. Norādot vbDirectory, tas dos jums visu failu nosaukumus, kā arī mapes.
Ja nenorādāt vbDirectory, funkcija DIR sniegs tikai failu nosaukumus.
Piezīme: Ja vēlaties iegūt visu galvenajā mapē un apakšmapēs esošo failu nosaukumus, nevarat izmantot funkciju DIR (jo tā nav rekursīva). Lai to izdarītu, varat izmantot Power Query (kodēšana nav nepieciešama) vai VBA failu sistēmas objektu (ar rekursiju).
5. piemērs. Iegūstiet visu mapē esošo apakšmapi nosaukumus
Zemāk esošais kods dotu jums visu apakšmapes nosaukumus norādītajā mapē.
Tas izmanto GetAtr funkcija VBA, kas ļauj pārbaudīt, vai funkcijas DIR atgrieztais nosaukums ir faila vai mapes/direktorija nosaukums.
Apakš GetSubFolderNames () Dim FileName kā virkne Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Vai kamēr FileName "" If GetAttr (PathName & FileName) = vbDirectory then Atkļūdot. Drukāt FileName beigas Ja FileName = Dir () Loop End Sub
Atkal es izmantoju Debug.Print, lai iegūtu vārdus tūlītējā logā. Tos var iegūt ziņojumu lodziņā vai programmā Excel (attiecīgi mainot kodu).
6. piemērs - iegūstiet pirmo Excel failu no mapes
Izmantojot funkciju DIR, atgriežamajā faila nosaukumā varat norādīt faila paplašinājumu vai jebkuru sufiksu/prefiksu.
Zemāk esošais kods parādītu pirmā Excel faila nosaukumu mapē Pārbaude.
Apakš GetFirstExcelFileName () Dim FileName kā virkne Dim PathName Kā virkne PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName & "*.xls*") MsgBox FileName End Sub
Ņemiet vērā, ka esmu izmantojis * .xls * (zvaigznītes zīme abās pusēs). Tas nodrošinās, ka tiek pārbaudītas visas Excel failu versijas (.xls, xlsx, .xlsm, .xlsb).
7. piemērs. Iegūstiet visu Excel failu nosaukumus mapē
Izmantojiet zemāk esošo kodu, lai iegūtu visu Excel failu nosaukumus mapē Pārbaude.
Apakš GetAllFileNames () Dim FolderName kā virkne Dim FileName As String FolderName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (FolderName & "*.xls*") Vai, kamēr FileName "" atkļūdot. Drukāt FileName FileName = Dir () Loop End Sub
Funkcija DIR atgriež tikai pirmā Excel faila nosaukumu, jo mēs to atkārtoti saucam cilpā, tā iet cauri visiem failiem un sniedz mums visu Excel failu nosaukumus.
Ceru, ka jums bija noderīga šī apmācība un piemēri.
Ļaujiet man zināt savas domas komentāru sadaļā.