Rekurzívne získanie zoznamu súborov a priečinkov pomocou VBA v Exceli
Dátum vydania:
Aktualizované:
Technické články > Rekurzívne získanie zoznamu súborov a priečinkov pomocou VBA v Exceli
Stav v roku 2026 a bezpečné používanie
Záver: Rekurzívne prejdite každý priečinok, zozbierajte požadované súbory a každý podpriečinok odovzdajte rovnakému postupu. Doplňte explicitné spracovanie chýb a pravidlá pre spojovacie body, symbolické odkazy, skryté priečinky a cesty s odmietnutým prístupom.
Čo sa naučíte
- Ako FileSystemObject sprístupňuje priečinky, podpriečinky, súbory, názvy a cesty.
- Ako rekurzia prechádza celý strom a prečo hlboké alebo cyklické štruktúry vyžadujú ochranu.
- Ako zapisovať výsledky do hárka bez pomalého spracovania každej bunky osobitne pri veľkom objeme údajov.
Pre koho je to určené: Používatelia Excelu, ktorí vytvárajú inventár kontrolovaného stromu priečinkov vo Windows.
Kontext v roku 2026: Ukážka zachytáva pôvodný lokálny test autora. Oprávnenia a správanie odkazov overte na kópii svojej adresárovej štruktúry; pri veľmi veľkom alebo bezpečnostne citlivom strome zvážte PowerShell či špecializovaný inventarizačný nástroj.
Bezpečnostná poznámka: Príkazy a príklady konfigurácie v pôvodnom článku neboli znovu spustené v aktuálnom produkčnom prostredí. Pred ich použitím overte podporované verzie, zálohy, prístupové oprávnenia a postup obnovy v oddelenom testovacom prostredí.
Hlavné oficiálne zdroje
Prehľad
Táto príručka ukazuje, ako pomocou makra VBA v Exceli získať zoznam súborov alebo priečinkov vrátane podpriečinkov. Hodí sa pre tieto úlohy:
- získanie úplných ciest všetkých súborov alebo priečinkov v zadanom strome;
- opakované spracovanie každého súboru alebo priečinka v strome.
Obsah
1. Postup
Nasledujúca ukážka rekurzívne prejde zadaný priečinok.
Kód je zapísaný ako funkcia. Funkciu možno vložiť do modulu a volať ju z procedúry Sub.
'Parameter Examples
'## filePath C:\Users\user\Desktop\test\
'## kind false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
filePath = Left(filePath, Len(filePath) - 1)
End If
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
MsgBox "File does not exist!"
Exit Function
End If
If kind Then
Dim buf As String
buf = Dir(filePath & "\*.*")
Do While buf <> ""
list.Add filePath & "\" & buf
buf = Dir()
Loop
Else
list.Add filePath
End If
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
For Each folder In .GetFolder(filePath).SubFolders
getFolderOrFile folder.Path, kind, list
Next folder
End With
End Function
Funkcia prijíma nasledujúce argumenty:
- filePath: cesta ku koreňovému priečinku, napríklad C:\Users\user\Desktop\test;
- kind: hodnota True vráti zoznam súborov, hodnota False zoznam priečinkov;
- list: kolekcia, do ktorej sa ukladajú výsledky.
Nasledujúca procedúra ukazuje volanie funkcie.
Sub test()
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
'------TODO------
ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
End Sub
Volanie getFolderOrFile uloží výsledky do kolekcie list. V ukážke je argument kind nastavený na False, takže kolekcia obsahuje priečinky.
Požadované spracovanie doplňte na miesto "TODO" v cykle For. Premenná item obsahuje aktuálnu cestu.
Ukážka zapisuje každú získanú cestu do bunky A1, takže tú istú bunku opakovane prepisuje. Pri reálnom výstupe treba meniť číslo riadka alebo zapísať pole hodnôt naraz.
2. Vysvetlenie kódu
Po ukážke použitia nasleduje stručné vysvetlenie algoritmu.
Kľúčovým miestom je volanie funkcie getFolderOrFile z jej vlastného tela.
Funkcia pre každý nájdený podpriečinok znova spustí rovnaké spracovanie.
Ide o rekurziu: volania pokračujú, kým sa neprejde celý dostupný strom priečinkov.
3. Zhrnutie
Funkcia getFolderOrFile používa rekurziu na vytvorenie zoznamu súborov alebo priečinkov v celom dostupnom strome.
Pred spracovaním reálnych údajov doplňte obsluhu odmietnutého prístupu, ochranu pred cyklami odkazov a efektívny zápis veľkého výsledku do hárka.
Technické články
Profil
Kontakt