Wyświetlanie plików i folderów rekurencyjnie za pomocą Excel VBA


Data publikacji:

Aktualizacja:


Artykuły > Wyświetlanie plików i folderów rekurencyjnie za pomocą Excel VBA

Stan na rok 2026 i bezpieczne użytkowanie

Wniosek: Rekurencyjnie odwiedzaj każdy folder, emituj potrzebne pliki i przekazuj każdy folder podrzędny z powrotem do tej samej procedury. Dodaj wyraźną obsługę błędów i zasady dotyczące połączeń, dowiązań symbolicznych, ukrytych folderów i ścieżek z odmową dostępu.

Czego się nauczysz

  • Jak FileSystemObject udostępnia foldery, podfoldery, pliki, nazwy i ścieżki.
  • Jak rekurencja buduje kompletne drzewo i dlaczego głębokie lub cykliczne drzewa wymagają zabezpieczeń.
  • Jak zapisywać wyniki w arkuszu bez powolnych operacji na komórkach na dużą skalę.

Dla kogo: Użytkownicy programu Excel inwentaryzujący kontrolowane drzewo katalogów systemu Windows.

Aktualizacja na 2026 rok: Próbka odzwierciedla oryginalny test lokalny autora. Sprawdź uprawnienia i zachowanie łączy w kopii struktury katalogów i rozważ PowerShell lub dedykowane narzędzie do inwentaryzacji w przypadku bardzo dużych drzew lub drzew wrażliwych na bezpieczeństwo.

Uwaga dotycząca bezpieczeństwa: polecenia i przykłady konfiguracji z pierwotnego artykułu nie zostały ponownie uruchomione we współczesnym środowisku produkcyjnym. Przed użyciem sprawdź wspierane wersje, kopie zapasowe, kontrolę dostępu i procedurę wycofania w oddzielnym środowisku testowym.

Oficjalne źródła pierwotne

Przegląd

W tej sekcji opisano jak za pomocą VBA (makro Excela) uzyskać listę plików oraz listę folderów wraz z podfolderami. Artykuł przeznaczony jest dla osób, które chcą zaprogramować następujące zadania

  • Chcę uzyskać listę wszystkich plików lub folderów pod folderem z ich pełnymi ścieżkami.
  • Chcesz wykonać przetwarzanie w pętli dla plików lub folderów w ramach folderu.

Spis treści

  1. Metoda programowania
  2. Kod Opis.
  3. streszczenie

1. Metoda programowania

Poniżej podano referencyjne przykłady programowania.

Ponieważ jest on tworzony w Function, chciałbym, aby został skopiowany nad tym, jak jest i aby wywołania metod były wykonywane z 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

Aby go użyć, przekaż następujące elementy jako argumenty.

  • filePath: katalog. Przykład.) C:\Users\user\Desktop\test
  • kind: Pass true, false. Jeśli True, zwraca listę plików. Jeśli false, zwraca listę folderów.
  • list: Kolekcja służy do przechowywania wyników. Przykładowa implementacja została przedstawiona poniżej.

Przykładowa implementacja rzeczywistego wywołania funkcji jest przedstawiona poniżej.

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

Wywołanie getFolderOrFile spowoduje zapisanie listy plików lub listy folderów na liście. W przykładzie implementacji jest False, więc lista folderów jest przechowywana.

Opisz proces, który chcesz wykonać w sekcji "TODO" w oświadczeniu For. ITEM może być traktowany jako zmienna typu String.

Źródłem odniesienia jest proces ustawiania pozyskanej listy na A1 w Excelu. (Proces wielokrotnie nadpisuje tę samą komórkę.)

2. Kod Opis.

Na tym kończy się instrukcja obsługi systemu, po czym następuje wyjaśnienie kodu.

Szczegóły można zobaczyć w kodzie, ale kluczowym punktem jest dalsze wywołanie metody getFolderOrFile.

W procesie wyszukiwania folderów proces ten jest dalej powtarzany poprzez wywołanie procesu wyszukiwania folderów, który jest mechanizmem przeszukiwania wszystkich folderów.

Wywołując własną metodę, wielokrotnie wywołuje własną metodę, dopóki folder jest znaleziony, przeszukując wszystkie foldery.

3. streszczenie

Jeśli potrzebujesz pomocy, jak uzyskać listę plików i listę folderów, w tym podfolderów, za pomocą VBA (makra Excela), zapoznaj się z tym działem.

■INFORMATION

Artykuły


■PROFILE

Profil


■Kontakt

Kontakt