Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Рекурсивный обход папок с помощью FSO

    Рекурсивный обход папок в VBA Excel с помощью FileSystemObject (FSO) из библиотеки Microsoft Scripting Runtime.

    Рекурсивный обход папок — одна из самых востребованных задач при автоматизации Excel: массовая обработка файлов, сбор данных из вложенных директорий, анализ структуры каталогов, поиск документов по всей иерархии. Стандартная функция Dir в VBA не поддерживает рекурсию, поэтому для таких задач оптимальным решением является FileSystemObject (FSO)

    Почему функция Dir не подходит

    Функция Dir не подходит для рекурсивного обхода папок, так как имеет ряд ограничений:

    • не умеет автоматически заходить во вложенные папки;
    • поддерживает только один контекст перебора;
    • не предоставляет расширенных сведений о файлах.

    Для реализации рекурсивного поиска пришлось бы писать сложную логику с ручным хранением путей. FileSystemObject решает эти проблемы и делает код более читаемым и масштабируемым.

    Что такое FileSystemObject

    FileSystemObject — объект из библиотеки Microsoft Scripting Runtime, предназначенный для расширенной работы с файловой системой Windows. Он позволяет:

    • получать доступ к файлам и папкам как к объектам;
    • обходить вложенные директории;
    • получать размер файлов, даты создания и изменения;
    • создавать, удалять и перемещать файлы и папки.

    Подключение библиотеки

    Перед использованием FSO рекомендуется подключить библиотеку:

    1. В редакторе VBA откройте Tools → References.
    2. Отметьте Microsoft Scripting Runtime.

    После этого станут доступны необходимые типы объектов (FileSystemObject, Folder, File).

    Что такое рекурсия простыми словами

    Рекурсия — это приём программирования, при котором процедура вызывает саму себя.

    В контексте обхода папок логика выглядит следующим образом:

    1. Получаем текущую папку.
    2. Обрабатываем все файлы в ней.
    3. Для каждой подпапки вызываем ту же процедуру.

    Процесс повторяется, пока не будут обработаны все уровни вложенности.

    Базовая структура рекурсивного обхода папок

    Универсальный шаблон рекурсивной процедуры:

    Запуск процедуры:

    Пример 1. Рекурсивный обход всех файлов Excel

    Частая практическая задача — найти и обработать все Excel-файлы во вложенных папках:

    Запуск процедуры:

    Пример 2. Подсчёт количества файлов во всей структуре

    Запуск процедуры:

    Пример 3. Рекурсивный поиск файлов по маске

    Запуск процедуры:

    Важные нюансы и ограничения рекурсии

    1. Глубина вложенности
      Очень глубокая структура папок может привести к переполнению стека.
    2. Права доступа
      При отсутствии прав на папку возникнет ошибка — рекомендуется обрабатывать исключения.
    3. Производительность
      Рекурсивный обход больших каталогов может занимать значительное время.

    Когда FileSystemObject — лучшее решение

    Используйте FileSystemObject, если вам нужно:

    • рекурсивно обходить папки;
    • получать расширенные свойства файлов;
    • работать с тысячами файлов;
    • писать поддерживаемый и масштабируемый VBA-код.

    Для простых проверок существования файла функция Dir может быть быстрее, но для сложной логики FSO практически незаменим.

    Заключение

    Рекурсивный обход папок в VBA Excel с помощью FileSystemObject — это универсальный приём, который позволяет автоматизировать работу с файловой системой на профессиональном уровне.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.