Vypsání souborů a složek rekurzivně pomocí Excel VBA


Publikováno:

Aktualizováno:


Články › Vypsání souborů a složek rekurzivně pomocí Excel VBA

Stav v roce 2026 a bezpečné použití

Závěr: Rekurzivně navštivte každou složku, odešlete soubory, které potřebujete, a předejte každou podřízenou složku zpět do stejného postupu. Přidejte explicitní zpracování chyb a zásady pro spojení, symbolické odkazy, skryté složky a cesty s odepřeným přístupem.

Co se dozvíte

  • Jak FileSystemObject zpřístupňuje složky, podsložky, soubory, názvy a cesty.
  • Jak rekurze vytváří úplný strom a proč hluboké nebo cyklické stromy potřebují zabezpečení.
  • Jak zapsat výsledky do listu bez pomalých operací po buňce ve velkém měřítku.

Pro koho je článek určen: Uživatelé aplikace Excel vytvářející inventář řízeného stromu adresářů Windows.

Aktuální stav v roce 2026: Vzorek odráží původní místní test autora. Ověřte oprávnění a chování odkazů na kopii vaší adresářové struktury a zvažte PowerShell nebo vyhrazený inventární nástroj pro velmi velké stromy nebo stromy citlivé na zabezpečení.

Bezpečnostní poznámka: Příkazy a konfigurační příklady z původního článku nebyly znovu spuštěny v současném produkčním prostředí. Před nasazením ověřte podporované verze, vytvořte zálohu a připravte postup návratu v odděleném testovacím prostředí.

Oficiální zdroje

Přehled

Následující část popisuje, jak získat seznam souborů a seznam složek včetně podsložek pomocí VBA (makro Excelu). Článek je určen lidem, kteří chtějí naprogramovat následující úkoly.

  • Chci získat seznam všech souborů nebo složek ve složce s jejich úplnými cestami.
  • Chcete provést zpracování ve smyčce pro soubory nebo složky ve složce.

Obsah

  1. Metoda programování
  2. Popis kódu.
  3. Shrnutí

1. Metoda programování

Níže jsou uvedeny referenční příklady programování.

Vzhledem k tomu, že je vytvořena ve Function, chtěl bych ji zkopírovat tak, jak je, a volání metod provést ze 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

Chcete-li ji použít, předejte jako argumenty následující údaje.

  • filePath···adresář. Příklad).C:\Users\user\Desktop\test
  • kind···Předat true, false. Pokud je True, vrátí seznam souborů. Pokud false, vrátí seznam složek.
  • list···Kolekce slouží k ukládání výsledků. Níže je uveden příklad implementace.

Příklad implementace skutečného volání funkce je uveden níže.

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

Volání getFolderOrFile uloží seznam souborů nebo seznam složek do seznamu. Příklad implementace je False, takže seznam složek je uložen.

Popište proces, který chcete provést, v části "TODO" v příkazu For. ITEM lze považovat za proměnnou typu String.

Referenčním zdrojem je proces nastavení získaného seznamu na A1 v aplikaci Excel. (Proces opakovaně přepisuje stejnou buňku).

2. Popis kódu.

Tímto končí návod k použití systému a následuje vysvětlení kódu.

Podrobnosti jsou uvedeny v kódu, ale klíčové je další volání metody getFolderOrFile v metodě getFolderOrFile.

V procesu vyhledávání složek se proces dále opakuje voláním procesu vyhledávání složek, což je mechanismus pro vyhledávání všech složek.

Voláním své vlastní metody opakovaně volá svou vlastní metodu, dokud je složka nalezena, a prohledává všechny složky.

3. shrnutí

Pokud potřebujete poradit, jak získat seznam souborů a seznam složek včetně podsložek pomocí VBA (makra aplikace Excel), přečtěte si tuto část.

Tím jsou shrnuty hlavní kroky a omezení, která je třeba zohlednit.