Список файлов и папок рекурсивно с помощью Excel VBA
Дата публикации:
Обновлено:
Статьи > Список файлов и папок рекурсивно с помощью Excel VBA
Статус 2026 года и безопасное использование
Вывод: Рекурсивно посетите каждую папку, создайте нужные файлы и передайте каждую дочернюю папку обратно в ту же процедуру. Добавьте явную обработку ошибок и политику для соединений, символических ссылок, скрытых папок и путей с запрещенным доступом.
Чему вы научитесь
- Как FileSystemObject предоставляет папки, подпапки, файлы, имена и пути.
- Как рекурсия строит полное дерево и почему глубокие или циклические деревья нуждаются в средствах защиты.
- Как записать результаты на лист без медленных операций с ячейками в больших масштабах.
Для кого: пользователи Excel, проводящие инвентаризацию контролируемого дерева каталогов Windows.
Актуальность на 2026 год года: Выборка отражает исходный местный тест автора. Проверьте разрешения и поведение ссылок на копии структуры каталогов, а также рассмотрите возможность использования PowerShell или специального инструмента инвентаризации для очень больших или чувствительных к безопасности деревьев.
Примечание по безопасности. Команды и примеры конфигурации из исходной статьи не проверялись повторно в современной производственной среде. Перед применением проверьте поддерживаемые версии, резервные копии, контроль доступа и процедуру отката в отдельной тестовой среде.
Официальные первоисточники
Обзор
В этом разделе описано, как получить список файлов и список папок, включая вложенные папки, с помощью VBA (макрос Excel). Статья предназначена для тех, кто хочет запрограммировать следующие задачи
- Я хочу получить список всех файлов или папок в папке с их полными путями.
- Вы хотите выполнить циклическую обработку файлов или папок в папке.
Оглавление
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), обратитесь к этому разделу.