Хитрости »
Основные понятия (21)Здесь собраны статьи, в которых разъясняются базовые понятия работы в Excel и VBA, а так же проблемы, с которыми сталкивается большинство начинающих
Сводные таблицы и анализ данных (4) Раздел поможет изучить сводные таблицы и научиться их использовать "на полную"
Графики и диаграммы (4) Раздел поможет научиться создавать диаграммы и графики в Excel, в том числе нестандартные
Работа с VB проектом (9) С помощью статей раздела вы научитесь создавать процедуры программно и выполнять различные операции с объектами самого VBA
Условное форматирование (5) Этот раздел поможет поближе познакомиться с Условным форматированием на примерах различных ситуаций
Списки и диапазоны (5) Статьи, посвященные работе не только с выпадающими списками, но и с диапазонами и хитростями их применения в рабочих файлах
Макросы(VBA процедуры) (56) Статьи раздела направлены на изучение VBA с детальным разбором кодов. Множество статей с примерами кодов под всевозможные ситуации с комментариями и пояснениями
Разное (33) Собраны статьи, которые не подходят ни под одну из представленных выше категорий или входят сразу в несколько. Но эти статье не менее полезные!

Просмотреть все файлы в папке

Иногда необходимо проделать однотипные операции с несколькими файлами, расположенными в одной папке. Можно открывать каждый по очереди:
Workbooks.Open "C:\Новая папка\Книга1.xlsx"
Workbooks.Open "C:\Новая папка\Книга2.xlsx"
и т.д.
Но если файлов много и все с разными именами, то это не очень практично и уж точно не компактно. А т.к. немногие начинающие могут сразу найти желаемое, я решил выложить код, который перебирает все файлы в папке и открывает их:

sFiles = Dir(sFolder & "*.xls*") - Строка отвечает за тип перебираемых файлов. В примере будут просмотрены любые файлы Excel. Звездочка на конце означает любой символ или набор символов. Т.е. если указать без неё - "*.xls", то будут просмотрены только файлы с расширением xls, а если указать xlsx - то файлы с расширением xlsx и никакие другие.
Если хотите перебрать файлы других форматов, а не Excel, то просто замените "*.xls" на нужное расширение. Например "*.doc". Также, если хотите собрать только файлы с определенными символами/словами в имени, то можно указать так: sFiles = Dir(sFolder & "*отчет*.xls*"). Будут просмотрены все файлы, содержащие в имени слово "отчет"(например "отчет за июнь.xls", "отчет за июль.xls", "сводный отчет.xls" и т.п.).

Но есть и еще одна проблема: что если необходимо открыть файлы не только в указанной папке, но и во всех её подпапках? Указанные выше код не подойдет в данной ситуации. В версиях Excel 2003 и младше это решалось с помощью метода .FileSearch, но в старших версиях данный метод по каким-то причинам был заблокирован разработчиками Microsoft. И осталось действовать только через рекурсивный метод перебора папок. Ниже приведен код, который открывает все файлы Excel в указанной папке, включая все подпапки:

Строка отвечает за тип перебираемых файлов. В примере будут просмотрены любые файлы Excel. Звездочка на конце означает любой символ или набор символов. Т.е. если указать без неё - "*.xls", то будут просмотрены только файлы с расширением xls, а если указать xlsx - то файлы с расширением xlsx и никакие другие.
Если добавить условие: If objFSO.GetBaseName(objFile) Like "*книга*" Then
то будут обработаны файлы, которые в имени содержать слово "книга". При этом регистр букв имеет значение. Т.е. если файл содержит в имени слово "Книга", то он не будет обработан.
Думаю теперь Вы легко сможете проделать необходимые операции с множеством файлов.

Скачать пример »

  Tips_Macro_Get_All_Files_from_Folder.xls (56,5 KiB, 2 702 скачиваний)

В примере я закомментировал строки, открывающие файл и вносящие изменения в ячейку А1 и заменил это созданием массива имен всех файлов в папках и подпапках. По окончании имена всех файлов заносятся в столбец "А". Сделано для того, чтобы Вы случайно не повредили информацию в файлах.

В последнее время участились вопросы как просмотреть еще и все диски. Поэтому решил выложить код, который просматривает все подключенные диски и выводит список всех файлов в них. Для работы кода достаточно разместить его в одном модуле с кодом выше:


Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Поиск по меткам

Access Multex Outlook VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Настройка Поиск данных Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны вебинар ссылки тренинг
Обсуждение: оставлено 26 коммент.
  1. Сергей:

    Подскажите, а как сделать, чтобы сканировал определенную папку и выводил название папок (не файлов), хранящихся в первоначальной папке. Т.е. есть папка A в ней хранятся папки C, D и т.д., нужно чтобы Excel вывел название папки виде таблицы (отображал наименование, дату создания, размер) и при добавление новых папок отображал в списке?!

  2. Екатерина:

    Спасибо большое за очень полезный скрипт! Он у меня работает на отлично, если нужно выполнить какие-то простые операции в файлах. Однако, если я вставляю в код действий с файлом операции с функцией Dir (например, мне нужно, чтобы программа создала файл с определённым именем, а затем при открытии следующего файла из указанной папки проверила, есть ли уже файл с таким именем или нет), программа не переходит на следующую ступень цикла и не открывает следующий файл - ругается на строчку sFiles = Dir . Как можно избежать такой проблемы? В программировании я профан, пытаюсь написать свой первый макрос для обработки данных.

  3. Vlad:

    Возникла такая проблема:Программа 1С Предприятие перестала читать формат xls и xlsx, и теперь видит только txt,пожалуйста подскажите как зделать так чтобы программа опять видела xls и xlsx ?

  4. Виктория:

    Добрый день!
    Подскажите, пожалуйста, как открыть файлы с определёнными именами с помощью цикла? Например, file1, file2, file3 и т.д.

  5. Леон:

    Чтобы скопировать тексты приведенных программ можно выделить весь текст (Ctrl+A), вставить в текстовой редактор, а оттуда уж выдрать нужное ;)

    • Леон, куда проще навести мышкой на код, в строке меню для окна кода выбрать "Показать код в новом окне" и уже там Ctrl+A. Скопируется вообще только нужное :-)

      • Дима:

        как вариант: в окне с кодом при наведении мышкой на него появляется строка с кнопками, там есть кнопка Copy, щелкнуть по ней, затем нажать комбинацию ctrl+c

  6. Сергей:

    очень полезный код, очень мне помог. скажите, как можно ограничить файлы, которые открываются при работе этого кода датой создания? например только вчерашние...

    • Про какой именно код идет речь не знаю(только в папке или включая подпапки), но для открытия только вчерашних надо проверять дату последнего сохранения файла перед открытием. Что-то вроде:

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Тренинги

Необходимо автоматизировать процессы в MS Office?
Доверьте это профессионалам и работа всегда будет сделана качественно и в срок!Заказать

Логин
Счетчики
Анализ сайта

Яндекс.Метрика
© 2016 Excel для всех  Войти