Excel vba filesystemobject
Объект FileSystemObject
1. Создание объекта
2. Свойства
2.1. Drives
Возвращаемое значение: объект-коллекция «Drives».
Замечание: только чтение.
3. Методы
3.1. CreateFolder
Назначение: создаёт каталог с указанным именем.
- — строка, путь к каталогу. Если такой каталог уже существует, произойдёт ошибка.
3.2. CopyFile
Назначение: копирует один или несколько файлов.
- — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — строка, путь назначения (куда копировать).
- — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).
3.3. CopyFolder
Назначение: рекурсивно копирует каталог.
- — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — строка, путь назначения (куда копировать).
- — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).
Описание: процесс копирования прерывается после первой возникшей ошибки.
3.4. MoveFile
Назначение: перемещает один или несколько файлов.
- — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — строка, путь назначения (куда копировать).
Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый файл уже существует или является папкой в Destination, возникнет ошибка.
3.5. MoveFolder
Назначение: рекурсивно перемещает один или несколько каталогов.
- — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — строка, путь назначения (куда копировать).
Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый каталог уже существует или является файлом в Destination, возникнет ошибка.
3.6. DeleteFile
Назначение: удаляет указанный файл.
- — строка, путь к файлу. В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — необязательный, булево (число). Определяет, удалять или нет файлы с атрибутом read-only. По умолчанию — False (не удалять).
3.7. DeleteFolder
Назначение: удаляет указанную папку.
- — строка, путь к папке. В последнем компоненте параметра можно использовать групповые символы «*» и «?».
- — необязательный, булево (число). Определяет, удалять или нет файлы с атрибутом read-only. По умолчанию — False (не удалять).
3.8. BuildPath
Назначение: добавляет к заданному пути новое имя. Если необходимо, вставляется «».
— строка, путь.
3.9. GetAbsolutePathName
Назначение: возвращает полный путь для заданного относительного пути (из текущего каталога).
— строка, относительный путь.
3.10. GetBaseName
Назначение: возвращает имя (без расширения) последнего компонента в заданном пути.
3.11. GetExtensionName
Назначение: возвращает расширение последнего компонента в заданном пути.
3.12. GetFileName
Назначение: возвращает имя (с расширением) последнего компонента в заданном пути.
3.13. GetParentFolderName
Назначение: возвращает путь к последнему компоненту в заданном пути (его каталог).
3.14. GetDriveName
Назначение: возвращает имя диска в заданном пути.
3.15. DriveExists
Назначение: возвращает True, если указанный диск сущесвтвует, и False в противном случае.
3.16. FileExists
Назначение: возвращает True, если указанный файл сущесвтвует, и False в противном случае.
3.17. FolderExists
Назначение: возвращает True, если указанный каталог сущесвтвует, и False в противном случае.
3.18. GetDrive
Назначение: возвращает объект «Drive» по указанному имени или пути.
- — строка, имя диска или путь к корневому каталогу диска, возможно UNC-путь.
3.19. GetFile
Назначение: возвращает объект «File» по указанному пути.
Описание: если файл не существует, произойдёт ошибка.
3.20. GetFolder
Назначение: возвращает объект «Folder» по указанному пути.
Описание: если каталог не существует, произойдёт ошибка.
3.21. GetSpecialFolder
Назначение: возвращает объект «Folder» для некоторых специальных папок Windows.
- — число, определяет специальную папку. Возможные значения:
- 0 — Каталог Windows.
- 1 — Системный каталог библиотек и драйверов.
- 2 — Каталог временных файлов, путь к которому хранится в переменной среды «TMP».
Описание: если каталог не существует, произойдёт ошибка.
3.22. GetTempName
Назначение: возвращает случайным образом сгенерированное имя файла, которое может быть использовано для создания временного файла.
3.23. CreateTextFile
Назначение: создаёт новый текстовый файл и возвращает объект «TextStream», указывающий на него.
- — строка, путь к файлу.
- — необязательный, булево (число). Перезаписывать файл, если он существует (True), или нет (False). По умолчанию — False. Если указано False и файл существует — произойдёт ошибка.
- — необязательный, булево (число). Файл в формате Unicode (True), или ASCII (False). По умолчанию — False.
3.24. OpenTextFile
Назначение: открывает текстовый файл и возвращает объект «TextStream», указывающий на него.
- — строка, путь к файлу.
- — необязательный, число. Возможные значения:
- 1 — Открыть файл только для чтения.
- 2 — Открыть файл для записи. Если файл уже существовал, его содержимое теряется.
- 8 — Открыть файл для добавления. Если файл уже существовал, информация будет дописываться в конец файла.
- — необязательный, булево (число). Создавать файл, если он не существует (True), или нет (False). По умолчанию — False.
- — необязательный, число. Возможные значения:
- -2 — Открыть файл в формате, используемом системой по умолчанию.
- -1 — Открыть файл в формате Unicode.
- 0 — Открыть файл в формате ASCII (по умолчанию).
3.25. GetStandardStream
Назначение: возвращает объект «TextStream», ассоциированный с потоком «StdIn», «StdOut» или «StdErr».
- — число, определяет поток. Возможные значения:
- 0 — StdIn.
- 1 — StdOut.
- 2 — StdErr.
- — необязательный, булево (число). True — формат Unicode, False — ASCII. По умолчанию — False.
Описание: метод применим при запуске административного скрипта в консоли с помощью CScript.exe.
3.26. GetFileVersion
Назначение: возвращает номер версии исполняемого файла (строка).
— строка, путь к файлу.
Описание: метод возвращает информацию, которую можно просмотреть на вкладке «Версия» палитры свойств файла в проводнике.
4. Объект Drive
4.1. Создание объекта
4.2. Свойства
4.2.1. AvailableSpace
Возвращаемое значение: число — количество доступного для пользователя места на диске в байтах.
Замечание: только чтение.
4.2.2. DriveLetter
Возвращаемое значение: строка — буква, ассоциированная с ресурсом.
Замечание: только чтение.
4.2.3. DriveType
Возвращаемое значение: число — определяет тип ресурса. Возможные значения:
- 0 — неизвестное устройство.
- 1 — устройство со сменным носителем.
- 2 — жёсткий диск.
- 3 — сетевой диск.
- 4 — CD-ROM.
- 5 — RAM-диск.
Замечание: только чтение.
4.2.4. FileSystem
Возвращаемое значение: cтрока — тип файловой системы (FAT, NTFS или CDFS).
Замечание: только чтение.
4.2.5. FreeSpace
Возвращаемое значение: число — количество свободного места на диске в байтах.
Замечание: только чтение.
4.2.6. IsReady
Возвращаемое значение: булево (число) — True, если устройство готово, иначе — False. Актуально для устройства со сменным носителем или CD-ROM.
Замечание: только чтение.
4.2.7. Path
Возвращаемое значение: строка — путь к диску (например, «C:», но не «C:»).
Замечание: только чтение.
4.2.8. RootFolder
Возвращаемое значение: объект «Folder», соответствующий корневому каталогу диска.
Замечание: только чтение.
4.2.9. SerialNumber
Возвращаемое значение: число — десятичный серийный номер диска.
Замечание: только чтение.
4.2.10. ShareName
Возвращаемое значение: строка — сетевое имя диска, если диск сетевой (иначе — пустая строка).
Замечание: только чтение.
4.2.11. TotalSize
Возвращаемое значение: число — общий объём диска в байтах.
Замечание: только чтение.
4.2.12. VolumeName
Возвращаемое значение: строка — метка тома диска.
VBA Excel. Объект FileSystemObject
Объект FileSystemObject, предоставляющий в VBA Excel доступ к файловой системе компьютера. Создание экземпляра FileSystemObject и его методы. Примеры.
Объект FileSystemObject
Объект FileSystemObject обеспечивает в коде VBA Excel следующие возможности:
- Проверка существования диска, папки или файла.
- Создание новой папки.
- Создание текстового файла и предоставление последовательного доступа для записи.
- Открытие текстового файла и предоставление последовательного доступа для записи или чтения.
- Копирование, перемещение и удаление папок и файлов.
- Работа с путями к папкам и файлам.
- Возвращение имен дисков, папок и файлов.
Создание, свойство, методы
Создание экземпляра FileSystemObject
Создать новый экземпляр объекта FileSystemObject можно с помощью раннего или позднего связывания.
Раннее связывание
Позднее связывание
Свойство FileSystemObject
В VBA Excel у объекта FileSystemObject есть только одно свойство (Excel 2016):
Свойство | Описание |
Drives | Возвращение коллекции всех дисков на компьютере |
Методы FileSystemObject
Свойство | Описание |
BuildPath | Добавление имени в существующий путь |
CopyFile | Копирование одного или нескольких файлов из одного расположения в другое |
CopyFolder | Копирование одной или нескольких папок из одного расположения в другое |
CreateFolder | Создание новой папки |
CreateTextFile | Создание текстового файла и возвращение объекта TextStream, используемого для записи в файл |
DeleteFile | Удаление одного или нескольких указанных файлов |
DeleteFolder | Удаление одной или нескольких указанных папок |
DriveExists | Проверка существования указанного диска |
FileExists | Проверка существования указанного файла |
FolderExists | Проверка существования указанной папки |
GetAbsolutePathName | Возвращение полного пути из корневого каталога диска для указанного пути |
GetBaseName | Возвращение базового имени указанного файла или папки |
GetDrive | Возвращение объекта Drive, соответствующего диску в указанном пути |
GetDriveName | Возвращение имени диска указанного пути |
GetExtensionName | Возвращение расширения файла для последнего компонента в указанном пути |
GetFile | Возвращение файла по указанному пути |
GetFileName | Возвращение имени файла или папки для последнего компонента в указанном пути |
GetFileVersion | Возвращение версии файла для последнего компонента в указанном пути |
GetFolder | Возвращение папки по указанному пути |
GetParentFolderName | Возвращение имени родительской папки последнего компонента в указанном пути |
GetSpecialFolder | Возвращение пути к некоторым специальным папкам Windows |
GetStandardStream | Возвращение стандартного ввода, вывода или потока ошибок |
GetTempName | Возвращение созданного случайным образом временного файла или папки |
Move | Перемещение указанного файла или папки из одного места в другое |
MoveFile | Перемещение одного или нескольких файлов из одного места в другое |
MoveFolder | Перемещение одного или нескольких папок из одного места в другое |
OpenTextFile | Открытие файла по указанному пути и возвращение объекта TextStream, используемого для чтения, записи и добавления данных в файл |
Примеры кода с FileSystemObject
Пример 1
Получение списка всех дисков на компьютере с помощью свойства Drives:
FileSystemObject in VBA – Explained
FileSystemObject also called as FSO, provides an easy object based model to access computer’s file system. You simply have to create an instance of FileSystemObject in VBA and then you can generate files, read files, delete files, iterate though folders and do many other operations on your computer’s file system.
The FileSystemObject is present inside the Microsoft Scripting Runtime Library i.e. Scrrun.dll . This DLL supports the creation and manipulation of files using TextStream object and this is the reason why FSO doesn’t supports operation on binary files.
Uses of File System Object:
FileSystemObject can be used for multiple tasks such as:
- Creating, opening, reading, writing and deleting text files.
- Creating, altering and deleting folders.
- Iterating files and folders.
- Copying and moving files or folders.
- Checking if a location (file path) exists or not.
Accessing FileSystemObject:
The FileSystemObject comprises of several object collections and each of these object collections contain information about a specific aspect of file system. These collections are:
Object | Description |
---|---|
Drive | This object allows you to get information about a drive attached to your system. For instance it can tell you the space available in a drive, its logical name etc. Note that the drive object that we are referring here doesn’t necessarily means the hard disk, it can be a CD-ROM, Flash drive, RAM or even a logically connected drive via LAN. |
Folder | This object allows you to create, delete, move or query a folder hierarchy. |
File | This object allows you to create, delete, move or query a File. |
TextStream | TextStream object allows you to read or write text files. |
So, diagrammatically a FileSystemObject can be shown as:
Please note that FSO communicates with most of the above objects indirectly. It just directly contains the object collection for “Drives”. Each “Drive” object in the “Drives” collection contains a chain of “Folder” objects. And each “Folder” object contains a “File” collection.
To make it more meaningful, let’s say it this way: A FileSystemObject contains three main methods to fetch (read) specific information about Drives, Folders or Files, these methods are GetDrive , GetFolder and GetFile respectively. Now let’s say you need to find the file size of a particular file, so you will create an instance of the GetFile method and then fetch its size property.
Note: GetDrive , GetFolder and GetFile are not the only methods inside FSO, I have just used them to explain things. In the below section we will see all the methods contained inside FileSystemObject.
FSO Methods:
Below table gives details about various FileObjectSystem methods and the tasks they perform:
Method | Description |
---|---|
GetDrive, GetFolder and GetFile | These methods are used for fetching information about Drive, Folders and Files respectively. |
CreateFolder and CreateTextFile | Helps in creating new folders or files. |
DeleteFile and DeleteFolder | Helps in deleting exiting files or folders. |
CopyFile and CopyFolder | These methods help in copying files or folders from one location to another. |
MoveFile and MoveFolder | These methods help in moving files or folders from one location to another. |
Creating a FileSystemObject in VBA:
In this section we will deal with two things:
- Creating a reference of Microsoft Scripting Runtime Library i.e. Scrrun.dll
- Creating an FSO Object.
Creating a reference of Microsoft Scripting Runtime Library:
To create a reference of Microsoft Scripting Runtime Library follow the below steps:
- First of all open the VBA editor by pressing “Alt + F11”.
- Next, navigate to “Tools” > “Reference” as shown above.
- This will open a references window. Here select and check the entry “Microsoft Scripting Runtime” and click “OK”.
- Now the reference to Microsoft Scripting Runtime Library has been added.
Creating a FSO Object:
Creating a FSO object is simple, follow the below steps to do this:
- In the VBA editor navigate to “Insert” > “Module”.
- Now in the module window type “ Public FSO As New FileSystemObject ”.
- This will create an object of FileSystemObject with the name FSO.
After this you can simply access the FileSystemObject’s methods using the FSO object.
6 Practical Examples of accessing FileSystemObject to perform different tasks:
Now let’s move to some practical examples of FSO:
Example 1: Use FSO to find the total free space of a drive.
Below is the code to do this:
In this code first we have created a Drive object using ‘ GetDrive ’ Method and then we have used its ‘ FreeSpace ’ property to fetch the free space. Finally we have displayed the free space using a message box.
Note that there are two properties to fetch the free space of a drive i.e. drv.FreeSpace and drv.AvailableSpace .
Example 2: Check if a Folder exists or not. If the folder doesn’t exists then create that folder.
Below is the code:
In the code we have used an InputBox function to get the path of folder from the user. After this using If statement along with FolderExists method we have checked whether that folder is present or not. If the folder is not present then we create that folder using the CreateFolder method.
Note: CreateFolder method will only create a single folder at a time. So, if you supply an argument “C:Folder1Folder2Folder3” to it then it will only create the Folder3 inside Folder2. But if Folder2 doesn’t exist then it will throw a path not found error.
Example 3: Write a code using FSO to copy a Folder from one location to another.
In the code we have used the CopyFolder method of FSO, this method accepts three arguments:
- Source Path
- Destination path
- A Boolean argument to specify Overwrite Existing.
Example 4: Using FileSystemObject fetch the Temp directory, System folder and Windows folder.
To do this we can use the below code:
In the code we have used the GetSpecialFolder method of FSO, this method accepts a single numerical argument i.e. 0-2.
- FSO.GetSpecialFolder(0) – Fetches the path of Windows Folder.
- FSO.GetSpecialFolder(1) – Fetches the path of System Folder.
- FSO.GetSpecialFolder(2) – Fetches the path of Local Temporary folder.
Example 5: Create a text file, write some content to it, then read the file and finally delete the file.
Below is the code to accomplish this:
This code first creates a text file, adds content to it, then reads it, displays it using a message box and finally deletes that file.
Example 6: Write a VBA Code that can iterate all the files present inside a folder and also fetches their size and modified date.
Following code can accomplish this task:
In this code we have created a Folder object and then we are iterating all its files using For Each loop. From the file object we are fetching the Name , Size and DateLastModified properties and finally we are writing them to the active worksheet.
So, this was all about FileSystemObject and how to use it in VBA. Do share your comments related to the topic.
Ankit is the founder of Excel Trick. He is tech Geek who loves to sit in front of his square headed girlfriend (his PC) all day long. :D. Ankit has a strong passion for learning Microsoft Excel. His only aim is to turn you guys into ‘Excel Geeks’.
Comments
Hi Ankit,
Thank you very much for explaining these things. Really helpful tips..
FileSystemObject – тяжелая артиллерия VB6 (статья)
FSO – тяжелая артиллерия VB6
Введение в объектную модель FSO
Новая особенность для VB6 — модель объекта ( FSO ) Объектная Файловая Система, которая обеспечивает основанный на объектах инструмент для работы с папками и файлами.
Это позволяет Вам использовать знакомый синтаксис object.method с богатым набором свойств, методов, и событий, чтобы обработать папки и файлы, в дополнение к использованию традиционных методов и команд Visual Basic. Объектная модель FSO дает вашим прикладным программам способность создавать, изменять, перемещать, и удалить папки, или выяснять, если специфические папки существуют, и если так, то где. Это также дает возможность Вам получить информацию относительно папок, типа их имен, дат, когда они были созданы или в последний раз изменялись, и т.д.
Объектная модель FSO позволяет намного проще проводить обработку файлов. При обработке файлов, ваша основная цель состоит в том, чтобы сохранить данные в области — и ресурсо-эффективном, легко доступном формате. Вы сможете создавать файлы, вставлять и изменять(заменять) и выводить (считывать) данные.
Объектная модель FSO, которая содержится в библиотеке типов Scripting type library (Scrrun.Dll), поддерживает создание текстового файла и манипулирование им
через объект TextStream . Однако это не поддерживает создание или манипулирование двоичными файлами. Чтобы управлять двоичными файлами, используется команда Open с бинарным флагом.
Объекты Файловой системы
Объектная модель FSO имеет следующие объекты:
Drive(Дисковод) — Позволяет Вам получить информацию относительно дисководов присоединенных к системе, их типа, количества доступного участка памяти, их обозначения, и т.д. Обратите внимание, что «дисковод» не обязательно жесткий диск. Это может быть дисковод CD-ROM, вертуальный диск, и т.д. Также не обязательно, чтобы дисководы были физически присоединенными к системе; они могут быть также логически подсоединены через локальную сеть.
Folder(Папка) — Позволяет Вам создавать, удалять, или перемещать папки, плюс запрос системы относительно их имен, путей, и так далее.
Files(Файлы) — Позволяет Вам создавать, удалять, или перемещать файлы, плюс запрос системы относительно их имен, путей, и так далее.
FileSystemObject — Основной объект группы, с полными методами, которые позволят Вам создать, удалять, получать информацию обовсем, и вообще, управляет дисководами, папками, и файлами. Многие из методов, связанных с этим объектом дублированы в других объектах.
TextStream — Дает возможность Вам читать и писать текстовые файлы.
Программирование в Объектной Модели FSO
Программирование в Объектной Модели FSO включает три основных задачи:
1. Использование метода CreateObject или объявления переменной как объект FileSystemObject, для создания объекта FileSystemObject;
2. Использование соответствующего метода в недавно созданном объекте;
3. Вызов свойств объекта.
Объектная Модель FSO содержится в библиотеке типов, называемой Scripting, которая размещена в файле Scrrun.Dll . Если Вы пока не имеете ссылку, то поставьте ее в меню References| Microsoft Scripting Runtime. Вы можете затем использовать Object Browser, чтобы просмотреть объекты, свойства, методы и события, а также константы.
Создание объекта FileSystemObject
Первый шаг должен создать объект FileSystemObject, чтобы работать с ним. Вы можете сделать это двумя способами: Объявить переменную, как объект:
Visual Basic | |||||||||||||||||||||||||
Visual Basic | |||||||||||||||||||||||
Visual Basic | |||||||||||||||||||||
Visual Basic | |||||||||||||||||||
Visual Basic | |||||||||||||||||
Visual Basic | |||||||||||||||
Visual Basic | |||||||||||||
Visual Basic | |||||||||||
Visual Basic | |||||||||
Visual Basic | |||||||
Visual Basic | |||||
Visual Basic | |||
Visual Basic | |
Visual Basic | |