Vba excel что такое dir
В этой статье я хотел бы рассказать как средствами VBA переименовать, переместить или скопировать файл. В принципе методы переименования, перемещения и копирования, так сказать, встроены в VBA. Это значит что можно без вызова сторонних объектов переименовать, переместить или копировать любой файл. Все это делается при помощи всего двух команд: FileCopy и Name [Исходный файл] As [Новый файл] . Притом команда FileCopy выполняет только копирование, а Name [Исходный файл] As [Новый файл] - как переименование, так и перемещение. Разница лишь в том, что при переименовании мы указываем только новое имя файла, а при перемещении - другую директорию(папку), в которую следует переместить файл. Плюс рассмотрим пример удаления файла.
Так же разберем методы копирования, перемещения, переименования и удаления файлов и папок через библиотеку FileSystemObject (FSO).
Работа с файлами встроенными командами VBA
Работа с файлами через объект FileSystemObject (FSO)
Работа с папками через объект FileSystemObject (FSO)
Во всех примерах работы с файлами встроенными функциями будет присутствовать проверка на наличие файла по указанному пути. Делать это будем при помощи встроенной функции Dir([PathName],[Attributes]) .
PathName - указывается полный путь к файлу
Attributes - указывается признак свойств файла. Вообще их несколько(скрытый, архивный и т.п.), но нас для наших задач будет интересовать пока только один: 16(vbDirectory). Он отвечает за проверку папок и файлов без специальных свойств(т.е. не архивные, не скрытые и т.д.). Хотя по сути его можно вообще не указывать, и тогда будет по умолчанию применен атрибут 0(vbNormal) - проверка файлов без определенных свойств. Ни в том ни в другом случае ошибкой это не будет.
Как видно ничего сложного.
Так же можно проделать те же операции с файлами при помощи объекта FileSystemObject. Строк кода несколько больше и выполняться операции будут медленнее(хотя вряд ли это будет заметно на примере одного файла). Однако есть существенный плюс - при помощи FileSystemObject можно корректно производить операции с файлами и папками на сетевом диске. Хотя та же Dir(sFileName, 16) часто выдает ошибку при работе с сетевыми дисками.
Прежде всего следует, я думаю, пояснить что за зверь такой - FileSystemObject.
FileSystemObject (FSO) - содержится в библиотеке типов Scripting, расположенной в файле библиотеки scrrun.dll. Объектная модель FSO дает возможность создавать, изменять, перемещать и удалять папки и файлы, собирать о них различную информацию: имена, атрибуты, даты создания или изменения и т.д. Чтобы работать с FSO необходимо создать переменную со ссылкой на объект библиотеки. Сделать это можно двумя способами: через ранее связывание и позднее. Я не буду сейчас вдаваться в подробности этих методов - тема довольно обширная и я опишу её в другой статье.
Ранее связывание: для начала необходимо подключить библиотеку Microsoft Scripting Runtime. Делается это в редакторе VBA: References-находите там Microsoft Scripting Runtime и подключаете. Объявлять переменную FSO при раннем связывании следует так:
Dim objFSO As New FileSystemObject
Плюсы раннего связывания: с помощью Object Browser можно просмотреть список объектов, свойств, методов, событий и констант, включенных в FSO. Но есть значительный минус: если планируется использовать программу на нескольких компьютерах, то есть большая вероятность получить ошибку(читать подробнее).
Позднее связывание: ничего нигде не надо подключать, а просто используем метод CreateObject(именно этот способ используется мной в примерах ниже). Методы таким образом просмотреть не получится, но зато работать будет без проблем на любых компьютерах без дополнительных действий.
Хочу обратить внимание, что при переименовании файла через FileSystemObject необходимо указать только имя нового файла - путь указывать не надо. Иначе получите ошибку.
Точно так же можно перемещать, копировать и удалять целые папки:
FSO, конечно, способен на большее - но цель данной статьи была показать основные операции с папками и файлами как стандартными методами, так и более продвинутыми.
Возвращает значение типа 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 функция Dir поддерживает использование знака умножения (*) и одиночного символа (?) в качестве подстановочных знаков для указания нескольких файлов. В macOS такие знаки воспринимаются как допустимые символы имени файла и не могут использоваться в качестве подстановочных знаков.
Так как macOS не поддерживает использование подстановочных знаков, для определения группы файлов используйте тип файла. Чтобы вместо имен файлов указать тип файла, воспользуйтесь функцией MacID. Например, следующий оператор возвращает имя первого текстового файла в текущей папке:
Чтобы вывести следующий файл в папке, укажите пустую строку:
Если функция MacID используется с функцией Dir в Microsoft Windows, возникает ошибка.
Любое значение атрибута, превышающее 256, считается значением MacID.
Значение pathname необходимо указать при первом вызове функции Dir, иначе произойдет ошибка. Если задаются атрибуты файла, значение pathname также должно быть указано.
Функция Dir возвращает первое имя файла, соответствующее значению pathname. Для получения дополнительных имен файлов, соответствующих значению pathname, вызовите функцию Dir повторно без аргументов. Если других соответствий найдено не будет, функция Dir возвратит пустую строку (""). После возврата строки нулевой длины в последующих вызовах необходимо указывать значение pathname, иначе произойдет ошибка.
Значение pathname можно изменить без получения всех имен файлов, соответствующих текущему значению pathname. Однако нельзя осуществить рекурсивный вызов функции Dir. С помощью функции Dir с атрибутом vbDirectory невозможно последовательно возвращать подкаталоги.
В Excel для Mac 2016 исходный вызов функции Dir осуществится успешно. Однако последующие вызовы для итерации по указанному каталогу приведут к ошибке. К сожалению, это известная ошибка.
Поскольку имена файлов возвращаются в произвольном порядке, их можно сохранить в массиве и отсортировать.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
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. You can 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.
Примечание: Функция, метод, объект или свойство, описанные в данном разделе, отключаются, если служба обработки выражений 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.
Читайте также: