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

VBA Excel. Список файлов в папке

    Получение списка файлов в указанной папке с помощью кода VBA Excel. Коллекция Files объекта Folder, возвращенного методом FileSystemObject.GetFolder.

    Коллекция Files объекта Folder

    Для получения списка файлов в указанной папке используется свойство Files объекта Folder. Объект Folder в VBA Excel возвращается методом GetFolder объекта FileSystemObject по полному имени папки в качестве аргумента.

    Если в указанной папке нет файлов, применение свойства Folder.Files приведет к возникновению ошибки. Для корректного завершения программы используйте обработчик ошибок или условие, проверяющее наличие файлов в папке.

    Получение списка файлов в папке

    Пример 1

    Код VBA Excel для получения списка файлов в указанной папке и записи полных имен файлов в массив (с поздней привязкой объектов к переменным):

    Используемые переменные:

    • fso – ссылка на экземпляр объекта FileSystemObject;
    • myPath – полное имя папки;
    • myFolder – ссылка на объект Folder (папка);
    • myFile – ссылка на один объект File из коллекции myFolder.Files;
    • myFiles() – массив для записи имен файлов;
    • i – счетчик элементов массива.

    Пример 2

    Получение списка файлов в указанной папке и запись имен файлов в ячейки первого столбца рабочего листа Excel (с ранней привязкой объектов к переменным):

    Ранняя привязка позволяет использовать подсказки свойств и методов объектов при написании кода VBA Excel.

    Как получить список папок до 3 уровней вложенности, смотрите в статье VBA Excel. Список папок.


    Фразы для контекстного поиска: обход файлов.


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

    18 комментариев для “VBA Excel. Список файлов в папке”

    1. Здравствуйте!
      Можно ли получить одно имя файла из списка коллекции Files используя свойство Folder.Files, при этом не используя цикл For Each?

      1. Евгений

        Добрый день!
        Одно имя получить можно, но только указав это самое имя, так как у коллекции Folder.Files есть только два свойства: Count и Item.

        Item — свойство по умолчанию — его можно не указывать.

        1. без явного указания имени в myFolder.Files.Item(«Зимняя картинка.doc»). Нужно получить имя файла не зная явно его имени. Попытка использования номера индекса myFolder.Files.Item(1) выдает ошибку.

          1. Евгений

            Свойство Folder.Files.Item не работает с индексами. Скорее всего, за файлами в папке никакие индексы или номера по порядку не закреплены. По крайней мере те, которые может распознать .Item.

            1. В итоге, существует ли способ получить одного имени файла из нескольких в папке, не используя запись в массив посредством цикла?

    2. Dim myPath, myFolder As Folder, myFile As File, i
      Где определяется что за пользовательский тип у Folder и File?

      1. Евгений

        Добрый день, Сергей!
        Это не пользовательские, а встроенные типы (классы) объектов, такие же, как, например, Worksheet или Range.

    3. Забыли сказать, что необходимо подключить Scripting Runtime Library. Иначе код ругается на каждую переменную.
      Если ее не подключать то необходимо для переменных myFile, myFolder и fso либо указать тип as Object либо не объявлять тип, тогда будет as Variant. И во втором примере сделать так:

    4. Добрый день подскажите как сделать список файлов, если путь к ним прописать в ячейке A1?

    5. Евгений добрый день, а не подскажите если такой макрос который применяет макрос к файлам в разных папках? Можно так чтоб указать начальную папку и он в подпапках искал нужные файлы и применял макрос или так например все пути файлов прописаны в столбце и применить макрос к данным файлам?

        1. Здравствуйте, как получить список я понимаю, а как к данному списку применить свой макрос, при том чтоб файлы открывались и закрывались сами?

          1. Евгений

            Добрый день, Юрий!
            Во втором примере из статьи замените блок

            на блок

    6. Константин

      Добрый день, Евгений!
      Есть вопрос!
      На диске D имеется папка с названием Проба, в ней 10 файлов эксель.
      Полученные файлы по почте, скидываются в папку Проба, при помощи копирование и вставить с заменой.
      В файле эксель с названием Первый на Листе1 имеется таблица, в столбце А названия 10 файлов эксель.
      Пожелание получить на Листе1 в таблице заливающуюся ячейку (или надпись «Обновлено»), после того как произведется вставка с заменой в папке Проба.
      Это для того, чтобы было видно, какие файлы надо открыть, чтобы данные по ссылкам появились в файле Первый.
      Подскажите?

    Обсуждение закрыто.