Vba excel что такое dir
Иногда необходимо проделать однотипные операции с несколькими файлами, расположенными в одной папке. Можно открывать каждый по очереди:
Workbooks.Open "C:\Новая папка\Книга1.xlsx"
Workbooks.Open "C:\Новая папка\Книга2.xlsx"
и т.д.
Но если файлов много и все с разными именами, то это не очень практично и уж точно не компактно. А т.к. немногие начинающие могут сразу найти желаемое, я решил выложить код, который перебирает все файлы в папке и открывает их:
Sub Get_All_File_from_Folder() Dim sFolder As String, sFiles As String Dim wb As Workbook 'диалог запроса выбора папки с файлами With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) 'отключаем обновление экрана, чтобы наши действия не мелькали Application.ScreenUpdating = False sFiles = Dir(sFolder & "*.xls*") Do While sFiles <> "" 'открываем книгу Set wb = Application.Workbooks.Open(sFolder & sFiles) 'действия с файлом 'Запишем на первый лист книги в ячейку А1 - www.excel-vba.ru wb.Sheets(1).Range("A1").Value = "www.excel-vba.ru" 'Закрываем книгу с сохранением изменений wb.Close True 'если поставить False - книга будет закрыта без сохранения sFiles = Dir Loop 'возвращаем ранее отключенное обновление экрана Application.ScreenUpdating = True End Sub
sFiles = Dir(sFolder & "*.xls*") - Строка отвечает за тип перебираемых файлов. В примере будут просмотрены любые файлы Excel. Звездочка на конце означает любой символ или набор символов. Т.е. если указать без неё - "*.xls", то будут просмотрены только файлы с расширением xls, а если указать xlsx - то файлы с расширением xlsx и никакие другие.
Если хотите перебрать файлы других форматов, а не Excel, то просто замените "*.xls" на нужное расширение. Например "*.doc". Также, если хотите собрать только файлы с определенными символами/словами в имени, то можно указать так: sFiles = Dir(sFolder & "*отчет*.xls*") . Будут просмотрены все файлы, содержащие в имени слово "отчет"(например "отчет за июнь.xls", "отчет за июль.xls", "сводный отчет.xls" и т.п.).
Но есть и еще одна проблема: что если необходимо открыть файлы не только в указанной папке, но и во всех её подпапках? Указанные выше код не подойдет в данной ситуации. В версиях Excel 2003 и младше это решалось с помощью метода .FileSearch, но в старших версиях данный метод по каким-то причинам был заблокирован разработчиками Microsoft. И осталось действовать только через рекурсивный метод перебора папок. Ниже приведен код, который открывает все файлы Excel в указанной папке, включая все подпапки:
Option Explicit Dim objFSO As Object, objFolder As Object, objFile As Object Sub Get_All_File_from_SubFolders() Dim sFolder As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub sFolder = .SelectedItems(1) End With sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) Application.ScreenUpdating = False Set objFSO = CreateObject("Scripting.FileSystemObject") GetSubFolders sFolder Set objFolder = Nothing Set objFSO = Nothing Application.ScreenUpdating = True End Sub Private Sub GetSubFolders(sPath) Dim sPathSeparator As String, sObjName As String Dim wb As Workbook Set objFolder = objFSO.GetFolder(sPath) For Each objFile In objFolder.Files If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Like ".xls*" Then 'открываем книгу Set wb = Application.Workbooks.Open(sPath & objFile.Name) 'действия с файлом 'Запишем на первый лист книги в ячейку А1 - www.excel-vba.ru wb.Sheets(1).Range("A1").Value = "www.excel-vba.ru" wb.Close True End If Next For Each objFolder In objFolder.SubFolders GetSubFolders objFolder.Path & Application.PathSeparator Next End Sub
If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Like ".xls*" Then
Строка отвечает за тип перебираемых файлов. В примере будут просмотрены любые файлы Excel. Звездочка на конце означает любой символ или набор символов. Т.е. если указать без неё - "*.xls", то будут просмотрены только файлы с расширением xls, а если указать xlsx - то файлы с расширением xlsx и никакие другие.
Если добавить условие: If objFSO.GetBaseName(objFile) Like "*книга*" Then
то будут обработаны файлы, которые в имени содержать слово "книга". При этом регистр букв имеет значение. Т.е. если файл содержит в имени слово "Книга", то он не будет обработан.
Думаю теперь Вы легко сможете проделать необходимые операции с множеством файлов.
В примере я закомментировал строки, открывающие файл и вносящие изменения в ячейку А1 и заменил это созданием массива имен всех файлов в папках и подпапках. По окончании имена всех файлов заносятся в столбец "А". Сделано для того, чтобы Вы случайно не повредили информацию в файлах.
В последнее время участились вопросы как просмотреть еще и все диски. Поэтому решил выложить код, который просматривает все подключенные диски и выводит список всех файлов в них. Для работы кода достаточно разместить его в одном модуле с кодом выше:
Sub Get_All_drives() Dim objDrives As Object, objDrive As Object Set objFSO = CreateObject("Scripting.FileSystemObject") Set objDrives = objFSO.Drives For Each objDrive In objDrives If objDrive.IsReady Then GetSubFolders objDrive.DriveLetter & ":\" End If Next objDrive End Sub
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает строку, представляющую имя файла, каталога или папки, соответствующую указанному шаблону, атрибуту файла или метке тома диска. Объект FileSystem обеспечивает большие показатели производительности и быстродействия операций файлового ввода-вывода, чем функция Dir . Дополнительные сведения см. в разделе GetDirectoryInfo(String).
Перегрузки
Возвращает строку, представляющую имя файла, каталога или папки, соответствующую указанному шаблону, атрибуту файла или метке тома диска. Объект FileSystem обеспечивает большие показатели производительности и быстродействия операций файлового ввода-вывода, чем функция Dir . Дополнительные сведения см. в разделе GetDirectoryInfo(String).
Возвращает строку, представляющую имя файла, каталога или папки, соответствующую указанному шаблону, атрибуту файла или метке тома диска. Объект FileSystem обеспечивает большие показатели производительности и быстродействия операций файлового ввода-вывода, чем функция Dir . Дополнительные сведения см. в разделе GetDirectoryInfo(String).
Возвращает строку, представляющую имя файла, каталога или папки, соответствующую указанному шаблону, атрибуту файла или метке тома диска. Объект FileSystem обеспечивает большие показатели производительности и быстродействия операций файлового ввода-вывода, чем функция Dir . Дополнительные сведения см. в разделе GetDirectoryInfo(String).
Возвращаемое значение
Строка, представляющая имя файла, каталога или папки, соответствующее указанному шаблону, атрибуту файла или метке тома на диске.
Примеры
В этом примере функция используется Dir для проверки наличия определенных файлов и каталогов.
Комментарии
Функция Dir поддерживает использование подстановочных знаков с несколькими символами ( * ) и однозначными знаками для ? указания нескольких файлов.
VbVolume возвращает метку тома для диска вместо определенного имени файла.
Необходимо указать PathName первый вызов Dir функции. Чтобы получить следующий элемент, можно выполнить последующие вызовы Dir функции без параметров.
Для правильного Dir выполнения функции требуется Read предоставить исполняемый код и PathDiscovery флаги FileIOPermission . Дополнительные сведения см. в статье FileIOPermissionSecurityExceptionи разрешениях на доступ к коду.
Ниже Attributes приведены значения перечисления аргументов:
Значение | Константа | Описание |
---|---|---|
Normal | vbnormal | По умолчанию. Указывает файлы без атрибутов. |
ReadOnly | vbReadOnly | Задает файлы, доступные только для чтения, а также файлы без атрибутов. |
Hidden | vbHidden | Задает скрытые файлы, а также файлы без атрибутов. |
System | vbSystem | Задает системные файлы, а также файлы без атрибутов. |
Volume | vbVolume | Указывает метку тома; Если указан любой другой атрибут, vbVolume игнорируется. |
Directory | vbDirectory | Задает каталоги или папки, а также файлы без атрибутов. |
Archive | vbArchive | Файл был изменен с момента создания последней резервной копии. |
Alias | vbAlias | У файла другое имя. |
Эти перечисления задаются языком Visual Basic и могут использоваться в любом месте кода вместо фактических значений.
См. также раздел
Применяется к
Dir(String, FileAttribute)
Возвращает строку, представляющую имя файла, каталога или папки, соответствующую указанному шаблону, атрибуту файла или метке тома диска. Объект FileSystem обеспечивает большие показатели производительности и быстродействия операций файлового ввода-вывода, чем функция Dir . Дополнительные сведения см. в разделе GetDirectoryInfo(String).
Параметры
Необязательный элемент. Строковое выражение, задающее имя файла, имя каталога или папки, либо метку тома диска. Если параметр PathName не обнаруживается, возвращается строка нулевой длины ( "" ).
Необязательный элемент. Перечисление или числовое выражение, значение которого задает атрибуты файла. Если этот параметр опущен, функция Dir возвращает файлы, соответствующие параметру Pathname , но не имеющие атрибутов.
Возвращаемое значение
Строка, представляющая имя файла, каталога или папки, соответствующее указанному шаблону, атрибуту файла или метке тома на диске.
Примеры
В этом примере функция используется Dir для проверки наличия определенных файлов и каталогов.
Комментарии
Функция Dir поддерживает использование подстановочных знаков с несколькими символами ( * ) и однозначными знаками для ? указания нескольких файлов.
VbVolume возвращает метку тома для диска вместо определенного имени файла.
Необходимо указать PathName первый вызов Dir функции. Чтобы получить следующий элемент, можно выполнить последующие вызовы Dir функции без параметров.
Для правильного Dir выполнения функции требуется Read предоставить исполняемый код и PathDiscovery флаги FileIOPermission . Дополнительные сведения см. в статье FileIOPermissionSecurityExceptionи разрешениях на доступ к коду.
Ниже Attributes приведены значения перечисления аргументов:
|Значение|Константа|Описание|
|-|-|-|
| Normal | vbnormal |По умолчанию. Указывает файлы без атрибутов.|
| ReadOnly | vbReadOnly |Задает файлы, доступные только для чтения, в дополнение к файлам без атрибутов.|
| Hidden | vbHidden |Задает скрытые файлы в дополнение к файлам без атрибутов.|
| System | vbSystem |Задает системные файлы в дополнение к файлам без атрибутов.|
| Volume | vbVolume |Указывает метку тома; Если указан любой другой атрибут, vbVolume игнорируется.|
| Directory | vbDirectory |Задает каталоги или папки в дополнение к файлам без атрибутов.|
| Archive | vbArchive |Файл был изменен с момента создания последней резервной копии.|
| Alias | vbAlias |У файла другое имя.|
Эти перечисления задаются языком Visual Basic и могут использоваться в любом месте кода вместо фактических значений.
Returns a String representing the name of a file, directory, or folder that matches a specified pattern or file attribute, or the volume label of a drive.
Syntax
Dir [ (pathname, [ attributes ] ) ]
The Dir function syntax has these parts:
Part | Description |
---|---|
pathname | Optional. String expression that specifies a file name; may include directory or folder, and drive. A zero-length string ("") is returned if pathname is not found. |
attributes | Optional. Constant or numeric expression, whose sum specifies file attributes. If omitted, returns files that match pathname but have no attributes. |
Settings
Constant | Value | Description |
---|---|---|
vbNormal | 0 | (Default) Specifies files with no attributes. |
vbReadOnly | 1 | Specifies read-only files in addition to files with no attributes. |
vbHidden | 2 | Specifies hidden files in addition to files with no attributes. |
vbSystem | 4 | Specifies system files in addition to files with no attributes. Not available on the Macintosh. |
vbVolume | 8 | Specifies volume label; if any other attribute is specified, vbVolume is ignored. Not available on the Macintosh. |
vbDirectory | 16 | Specifies directories or folders in addition to files with no attributes. |
vbAlias | 64 | Specified file name is an alias. Available only on the Macintosh. |
These constants are specified by Visual Basic for Applications and can be used anywhere in your code in place of the actual values.
Remarks
In Microsoft Windows and macOS, Dir supports the use of multiple character (*) and single character (?) wildcards to specify multiple files.
Because the Macintosh doesn't support the wildcards, use the file type to identify groups of files. Use the MacID function to specify file type instead of using the file names. For example, the following statement returns the name of the first TEXT file in the current folder:
To iterate over all files in a folder, specify an empty string:
If you use the MacID function with Dir in Microsoft Windows, an error occurs.
Any attribute value greater than 256 is considered a MacID value.
You must specify pathname the first time you call the Dir function, or an error occurs. If you also specify file attributes, pathname must be included.
Dir returns the first file name that matches pathname. To get any additional file names that match pathname, call Dir again with no arguments. When no more file names match, Dir returns a zero-length string (""). After a zero-length string is returned, you must specify pathname in subsequent calls, or an error occurs.
You can change to a new pathname without retrieving all of the file names that match the current pathname. However, you can't call the Dir function recursively. Calling Dir with the vbDirectory attribute does not continually return subdirectories.
Because file names are retrieved in case-insensitive order on Windows and case-sensitive order on macOS, you may want to store returned file names in an array, and then sort the array.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Возвращает значение типа String, определяющее имя файла, каталога или папки, которое соответствует указанному шаблону, атрибуту файла либо метке тома диска.
Синтаксис
Dir [ (pathname, [ attributes ] ) ]
Синтаксис функции Dir состоит из следующих элементов.
Часть | Описание |
---|---|
pathname | Необязательный. Строковое выражение, указывающее имя файла; может включать каталог или папку, а также диск. Если файл, указанный параметром pathname, не найден, возвращается строка нулевой длины (""). |
attributes | Необязательный. Константа или числовое выражение, определяющее атрибуты файла. Если этот параметр опущен, возвращаются файлы, которые соответствуют параметру pathname, но не имеют атрибутов. |
Параметры
Аргумент attributes может принимать следующие значения.
Константа | Значение | Описание |
---|---|---|
vbNormal | 0 | (По умолчанию.) Определяет файлы без атрибутов. |
vbReadOnly | 1 | В дополнение к файлам без атрибутов определяет файлы, доступные только для чтения. |
vbHidden | 2 | Определяет скрытые файлы, а также файлы без атрибутов. |
vbSystem | 4 | В дополнение к файлам без атрибутов определяет системные файлы. Недоступно в macOS. |
vbVolume | 8 | Определяет метку тома; если указан какой-либо другой атрибут, параметр vbVolume игнорируется. Недоступно в macOS. |
vbDirectory | 16 | В дополнение к файлам без атрибутов определяет каталоги (папки). |
vbAlias | 64 | Указанное имя файла является псевдонимом. Доступно только в macOS. |
Эти константы определены в Visual Basic для приложений и могут использоваться в коде вместо фактических значений.
Примечания
В Microsoft Windows и macOS функция Dir поддерживает использование знака умножения (*) и одиночного символа (?) в качестве подстановочных знаков для указания нескольких файлов.
Так как macOS не поддерживает использование подстановочных знаков, для определения группы файлов используйте тип файла. Чтобы вместо имен файлов указать тип файла, воспользуйтесь функцией MacID. Например, следующий оператор возвращает имя первого текстового файла в текущей папке:
Чтобы вывести следующий файл в папке, укажите пустую строку:
Если функция MacID используется с функцией Dir в Microsoft Windows, возникает ошибка.
Любое значение атрибута, превышающее 256, считается значением MacID.
Значение pathname необходимо указать при первом вызове функции Dir, иначе произойдет ошибка. Если задаются атрибуты файла, значение pathname также должно быть указано.
Функция Dir возвращает первое имя файла, соответствующее значению pathname. Для получения дополнительных имен файлов, соответствующих значению pathname, вызовите функцию Dir повторно без аргументов. Если других соответствий найдено не будет, функция Dir возвратит пустую строку (""). После возврата строки нулевой длины в последующих вызовах необходимо указывать значение pathname, иначе произойдет ошибка.
Значение pathname можно изменить без получения всех имен файлов, соответствующих текущему значению pathname. Однако нельзя осуществить рекурсивный вызов функции Dir. С помощью функции Dir с атрибутом vbDirectory невозможно последовательно возвращать подкаталоги.
Так как имена файлов возвращаются в порядке без учета регистра для Windows и с учетом регистра для macOS, их можно сохранить в массиве и затем отсортировать массив.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Примечание: Функция, метод, объект или свойство, описанные в данном разделе, отключаются, если служба обработки выражений Microsoft Jet выполняется в режиме песочницы, который не позволяет рассчитывать потенциально небезопасные выражения. Для получения дополнительных сведений выполните в справке поиск по словам "режим песочницы".
Возвращает значение типа String, определяющее имя файла, каталога или папки, которое соответствует указанному шаблону, атрибуту файла либо метке тома диска.
Dir[(путь [, атрибуты] )]
Функция Dir имеет следующие аргументы:
имя_пути
Необязательный аргумент. Строкное выражение, которое указывает имя файла — может включать каталог или папку и диск. Если путь не найден, возвращается нулевая строка ("").
атрибуты
Необязательный аргумент. Константа или числовое выражение, сумма которого определяет атрибуты файла. Если этот аргумент опущен, функция возвращает файлы, соответствующие пути, но не имеющие атрибутов.
Аргумент атрибутыАргумент может принимать следующие значения:
(По умолчанию.) Определяет файлы без атрибутов.
В дополнение к файлам без атрибутов определяет файлы, доступные только для чтения.
В дополнение к файлам без атрибутов определяет скрытые файлы.
В дополнение к файлам без атрибутов определяет системные файлы. Недоступно в macOS.
Определяет метку тома. Если указан какой-либо другой атрибут, vbVolume игнорируется. Недоступно в macOS.
vbDirectory
В дополнение к файлам без атрибутов определяет каталоги (папки).
Указанное имя файла является псевдонимом. Доступно только в macOS.
Примечание: Приведенные здесь константы определены в Visual Basic для приложений (VBA), что позволяет заменять ими числовые значения в любом месте программы.
В Microsoft Windows функция Dir поддерживает использование подстановочных знаков: звездочки (*), заменяющей несколько символов, и вопросительного знака (?), заменяющего один символ, для указания нескольких файлов. В macOS такие знаки воспринимаются как допустимые символы имени файла и не могут использоваться в качестве подстановочных знаков.
Так как macOS не поддерживает использование подстановочных знаков, для определения группы файлов используйте тип файла. Чтобы вместо имен файлов указать тип файла, воспользуйтесь функцией MacID. Например, следующий оператор возвращает имя первого текстового файла в текущей папке:
Чтобы вывести следующий файл в папке, укажите пустую строку:
При совместном использовании функций MacID и Dir в Windows возникнет ошибка.
Любое значение аргумента атрибуты, превышающее 256, считается значением функции MacID.
При первом вызове функции Dir необходимо определить аргумент путь, иначе возникнет ошибка. При определении атрибутов файла необходимо также указать аргумент путь.
Функция Dir возвращает первый файл, имя которого соответствует значению аргумента путь. Чтобы найти другие файлы, имена которых соответствуют значению аргумента путь, снова вызовите функцию Dir, но без аргументов. Если других соответствий найдено не будет, функция Dir возвратит пустую строку (""). После того как получена пустая строка, необходимо указать аргумент путь при последующих вызовах функции, иначе возникнет ошибка. Вы можете изменить значение аргумента путь, не дожидаясь получения всех имен файлов, которые соответствуют старому значению аргумента путь. Однако нельзя осуществить рекурсивный вызов функции Dir. С помощью функции Dir с атрибутом vbDirectory невозможно последовательно возвращать подкаталоги.
Совет. Так как имена файлов возвращаются не по порядку, можно сохранить их в массиве, а затем отсортировать его.
Пример
Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.
В этом примере функция Dir используется для того, чтобы убедиться в наличии определенных файлов и каталогов. В macOS диск по умолчанию обозначается «HD:», а части аргумента «путь» отделяются друг от друга двоеточиями вместо обратной косой черты. Кроме того, в macOS подстановочные знаки Windows воспринимаются как допустимые символы имени файла. Для указания группы файлов можно воспользоваться функцией MacID.
Читайте также: