Изброяване на файлове и папки рекурсивно с Excel VBA


Публикувано:

Актуализирано:


Статии › Изброяване на файлове и папки рекурсивно с Excel VBA

Състояние през 2026 г. и безопасна употреба

Заключение: Посетете повторно всяка папка, излъчете файловете, от които се нуждаете, и предайте всяка детска папка обратно в същата процедура. Добавяне на изрична обработка на грешки и политика за разклонения, символични линкове, скрити папки и отказани от достъпа пътища.

Какво ще научите

  • Как файлова система Обектът излага папки, подпапки, файлове, имена и пътеки.
  • Как рекурсията изгражда цяло дърво и защо дълбоките или цикличните дървета се нуждаят от предпазни мерки.
  • Как да напишете резултатите на работен лист без бавни клетъчни операции в голям мащаб.

За кого е статията: Excel потребители инвентаризиране на контролирана директория Windows дърво.

Актуално към 2026 г.: Пробата отразява оригиналния местен тест на автора. Валидирайте разрешения и свържете поведение на копие от структурата на директорията си, и да разгледа PowerShell или специален инвентарен инструмент за много големи или чувствителни към сигурност дървета.

Бележка за безопасност: Командите и конфигурационните примери в първоначалната статия не са изпълнявани повторно в съвременна производствена среда. Преди прилагане проверете поддържаните версии, направете резервно копие и подгответе план за връщане в отделна тестова среда.

Официални източници

Преглед

Тук е описано как да получа списък с файлове и списък с папки, включително подпапки, с помощта на VBA (макрос на Excel). Статията е предназначена за хора, които искат да програмират следните задачи

  • Искам да получа списък на всички файлове или папки в дадена папка с пълните им пътища.
  • Искате да извършите обработка в цикъл за файлове или папки в дадена папка.

Съдържание

  1. Метод на програмиране
  2. Код Описание.
  3. Обобщение

1. Метод на програмиране

По-долу са дадени референтни примери за програмиране.

Тъй като тя е създадена във Function, бих искал да я копирам така, както е, а извикванията на методите да се извършват от 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

За да го използвате, подайте следните аргументи.

  • filePath···директория. Пример).C:\Users\user\Desktop\test
  • kind···Предайте true, false. Ако е True, връща списък с файлове. Ако е false, връща списък с папки.
  • list···Колекцията се използва за съхраняване на резултатите. По-долу е даден пример за изпълнение.

По-долу е показан пример за изпълнение на действителното извикване на функция.

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

Извикването на getFolderOrFile ще съхрани списък от файлове или списък от папки в списъка. Примерът за изпълнение е False, така че списъкът с папки се съхранява.

Опишете процеса, който искате да извършите, в раздела "TODO" в командата For. ITEM може да се разглежда като променлива String.

Референтният източник е процесът на задаване на придобития списък към A1 в Excel. (Процесът многократно презаписва една и съща клетка).

2. Код Описание.

Това е краят на инструкциите за използване на системата, последвани от обяснение на кода.

Подробностите могат да се видят в кода, но ключовият момент е допълнителното извикване на getFolderOrFile в метода getFolderOrFile.

В процеса на търсене на папки процесът се повтаря допълнително чрез извикване на процеса на търсене на папки, който е механизъм за търсене на всички папки.

Чрез извикване на собствения си метод той многократно извиква собствения си метод, докато папката е намерена, като претърсва всички папки.

3. резюме

Ако имате нужда от помощ за получаване на списък с файлове и списък с папки, включително подпапки, с помощта на VBA (макроси на Excel), вижте този раздел.

Това са основните стъпки и ограничения, които трябва да имате предвид.