Функция Dir в VBA Excel: синтаксис, параметры, примеры. Проверка существования файлов, поиск папок, перебор содержимого директорий.
Что такое функция Dir в VBA
Функция Dir — один из часто используемых инструментов в арсенале разработчика VBA Excel. Она позволяет работать с файловой системой Windows: проверять существование файлов, находить папки и последовательно перебирать содержимое директорий.
Dir возвращает пустую строку ("").Функция активно используется при автоматизации Excel с помощью VBA, работе с отчётами, массовой обработке файлов и построении макросов для импорта данных.
Синтаксис функции Dir
|
1 |
Dir([pathname], [attributes]) |
Параметры
- pathname (необязательный) — строка с путём к файлу или папке, которая может включать имя диска, абсолютный или относительный путь, а также маски поиска (
*,?). - attributes (необязательный) — числовая константа, определяющая атрибуты файлов или папок, которые нужно найти.
Важно: параметры
pathnameиattributesучитываются только при первом вызовеDir. Все последующие вызовы должны выполняться без параметров (Dir()), иначе предыдущий контекст поиска будет сброшен.
Как работает функция Dir
Функция Dir использует внутренний указатель состояния и работает в итеративном режиме:
- При первом вызове вы указываете путь (и при необходимости атрибуты).
Dirвозвращает имя первого найденного файла или папки.- Каждый следующий вызов
Dir()возвращает следующий объект в той же директории. - Когда объекты заканчиваются, функция возвращает пустую строку.
Это поведение необходимо учитывать при написании циклов и при работе с несколькими папками.
Атрибуты функции Dir (Константы)
Атрибуты позволяют отфильтровать файлы и папки по их свойствам. Атрибуты являются битовыми флагами* и могут комбинироваться.
| Константа | Значение | Описание |
|---|---|---|
| vbNormal | 0 | Обычные файлы (значение по умолчанию). |
| vbReadOnly | 1 | Файлы только для чтения. |
| vbHidden | 2 | Скрытые файлы. |
| vbSystem | 4 | Системные файлы. |
| vbDirectory | 16 | Папки (директории). |
| vbArchive | 32 | Архивные файлы. |
Рекомендация: для объединения атрибутов используйте оператор
Or, так как он корректно работает с битовыми флагами.
Пример:
|
1 |
Dir(path, vbHidden Or vbSystem) |
* Битовые флаги – это способ использования отдельных битов в переменной (в нашем случае — в константах) для хранения булевых значений.
Примеры использования Dir в Excel VBA
Проверка существования файла
Один из самых распространённых сценариев — проверка, существует ли файл перед его открытием или обработкой.
|
1 2 3 4 5 6 7 8 9 10 |
Sub CheckFileExists() Dim filePath As String filePath = "C:\Reports\January.xlsx" If Dir(filePath) <> "" Then MsgBox "Файл найден!", vbInformation Else MsgBox "Файл не существует.", vbExclamation End If End Sub |
Перебор всех файлов в папке
Функция Dir часто используется для обработки группы файлов одного типа — например, всех Excel‑книг в папке.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub LoopThroughFiles() Dim folderPath As String Dim fileName As String folderPath = "C:\MyDocs\" fileName = Dir(folderPath & "*.xlsx") Do While fileName <> "" Debug.Print "Обработка файла: " & fileName fileName = Dir() Loop End Sub |
Поиск и перебор только папок
Чтобы получить список подпапок, используется атрибут vbDirectory. При этом Dir также возвращает служебные элементы . и .., которые необходимо исключить.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub ListFolders() Dim path As String Dim folderName As String path = "C:\" folderName = Dir(path, vbDirectory) Do While folderName <> "" If (GetAttr(path & folderName) And vbDirectory) = vbDirectory Then If folderName <> "." And folderName <> ".." Then Debug.Print "Найдена папка: " & folderName End If End If folderName = Dir() Loop End Sub |
Примечание: в редких случаях
GetAttrможет вызвать ошибку доступа (например, для защищённых или сетевых каталогов).
Важные нюансы и ограничения функции Dir
- Порядок элементов
Dirвозвращает файлы и папки в порядке, определяемом файловой системой. Не следует полагаться на строгую сортировку. - Отсутствие рекурсии
Функция не выполняет поиск во вложенных папках автоматически. Для рекурсивного обхода требуется дополнительная логика. - Единственный контекст поиска
Одновременно можно выполнять только один переборDir. Новый вызов с путём сбрасывает предыдущий. - Ограниченные метаданные
Dirвозвращает только имя объекта — без размера, даты создания и других свойств.
Когда стоит использовать FileSystemObject
Учитывая ограничения функции Dir, если разработчику требуется:
- рекурсивный обход папок;
- получение размера файлов и их дат;
- более гибкая работа с путями;
целесообразно использовать объект FileSystemObject из библиотеки Microsoft Scripting Runtime.
Заключение
Функция Dir в VBA Excel — простой, быстрый и надёжный инструмент для работы с файлами и папками. Она идеально подходит для базовых задач автоматизации: проверки существования файлов, перебора директорий и фильтрации по маске.
При работе со сложной файловой структурой или расширенными метаданными стоит рассмотреть использование FileSystemObject, однако для большинства повседневных задач Dir остаётся оптимальным решением.