Что такое FileSystemObject (FSO) и как использовать его в VBA Excel?
FileSystemObject используется для работы с папками и файлами, связанными с системой. Мы можем использовать его для доступа к файлам, папкам, диску и текстовым потокам. Он может не только получать доступ к файлам, папкам и текстовым файлам, но и создавать. Эти операции выполняются не только на жестком диске системы, но и на любом устройстве, подключенном к файлу. Это означает, что вы можете получить доступ к флеш-накопителям, компакт-дискам или виртуально подключенным сетевым дискам.
Это операции, которые мы можем выполнять с помощью FileSystemObject в VBA:
Для создания, открытия, чтения, записи и удаления текстовых файлов.
Для добавления, изменения и удаления папок.
Перебирать файлы и папки.
Для копирования и перемещения файлов или папок в другие места.
Для проверки наличия файла или папки в этом месте
Как получить доступ к FileSystemObject в VBA?
Объект файловой системы является частью библиотеки времени выполнения сценариев Microsoft.
Чтобы получить доступ к объекту FileSystemObject, нам необходимо подключить или добавить ссылку на библиотеку времени выполнения сценариев Microsoft или Scrrun.dll *.
Примечание. FileSystemObject не поддерживает работу с двоичными файлами, поскольку Scrrun.dll поддерживает создание файлов и управление ими с помощью объекта TextStream.
Существует два метода создания FileSystemObject в VBA:
1: Создание объекта FSO с помощью метода CreateObject:
Используя этот метод, мы сначала объявляем переменный объектный тип. Затем установите ссылку объекта FSO на эту переменную с помощью CreateObject:
Sub LearnFso() 'Creating the object variable Dim fso As Object 'Create the FileSystemObject using Create Object Method Set fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Этот метод динамичен и переносим. Это означает, что если вы делитесь кодом с другими системами, этот код будет работать отлично. Не имеет значения, какая у вас версия Microsoft Runtime Scripting.
Единственный недостаток заключается в том, что вы не сможете увидеть intellisense, предоставляемый VBA. Вам придется полагаться на свои знания, чтобы использовать все свойства и методы FileSystemObject.
2: Создание объекта FSO путем добавления ссылки на сценарий времени выполнения Microsoft. Вы можете напрямую создать объект FileSystemObject в VBA, используя ключевое слово new.
Для этого вам нужно будет добавить ссылку на последнюю версию Microsoft Scripting Runtime в вашей системе.
Чтобы добавить ссылку, перейдите к опции ссылок в меню инструментов.
Здесь найдите DLL-файл Microsoft Scripting Runtime. Проверьте это и нажмите ОК.
Теперь вы готовы создать и использовать объект FSO.
Sub LearnFso() Dim fso as new FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Или
Sub LearnFso() Dim fso as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Оба будут работать нормально.
Основное преимущество этого метода заключается в том, что вы сможете увидеть интеллект VBA. VBA покажет вам все свойства и методы объекта fso. Он также сообщит, какие переменные он примет и какое значение вернет.
Если вы поделитесь этим кодом с другими системами, вам придется попросить их добавить ссылку на Scripting Runtime из инструментов, иначе они получат ошибку компиляции, что определяемый пользователем тип не определен. Это похоже на импорт других языков программирования.
Обратите внимание, что FSO не является ключевым словом. Вы можете использовать его как имя переменной. Это просто соглашение называть объект файловой системы как fso. Вот почему некоторые люди путают это с ключевым словом. Оба метода создания объектов FSO имеют свои преимущества и недостатки, о которых я упоминал при их объяснении. Так что используйте в соответствии с вашими потребностями. В этой статье я воспользуюсь вторым методом создания FileSystemObject.
Теперь, когда мы знаем, как создать FileSystemObject в VBA, давайте воспользуемся этими знаниями для выполнения некоторых значимых задач. Я имею в виду, давайте перейдем к примерам.
Пример 1: Получить всю подпапку в указанной папке. Первый пример, который мы увидим, — получение имен подпапок из определенной папки.
Sub LearnFso() ' decaring variables that we will need Dim fso As FileSystemObject ' Variable for the FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder 'Intializing the objects fdrpath = "D:\Downloads" 'Declaring the folder Set fso = New FileSystemObject 'Creating the fso object Set fdr = fso.GetFolder(fdrpath) 'Creating the folder object of given folder 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr End Sub
Когда вы запустите приведенный выше код, вы получите следующее.
Да уж! Это моя папка для скачивания. Не зацикливайтесь на этом.
Как это работало?
Давайте разбираться по шагам:
1: Удаление переменных, которые нам понадобятся
Dim fso As FileSystemObject ‘Переменная для объекта FileSystem Dim fdr As Folder’ Переменная для базовой папки _ _Dim subfdr As Folder ‘Переменная для подпапок Сначала мы объявили все переменные, которые нам понадобятся в этом примере.
Первая переменная — это, конечно, объект файловой системы fso as. Две переменные fdr и subfdr относятся к типу папки. Мы будем использовать объект fso для создания объекта типа файла вместо непосредственного создания. Переменная fdrpath * используется для хранения пути к базовой папке, из которой мы хотим получить все подпапки.
2: Инициализация объектов
fdrpath = «D: \ Downloads» _ ‘Объявление папки _Set fso = New FileSystemObject’ Создание объекта fso Set fdr = fso.GetFolder (fdrpath) ‘Создание объекта папки данной папки На этом этапе мы инициализировали все объекты, которые мы заявили, кроме subfdr. Обратите внимание, что мы инициализировали файловую переменную fdr, используя метод объекта fso getFolder.
Метод GetFolder () объекта FileSystemObject принимает путь к папке или каталогу в виде строки и возвращает объект типа файла.
3: цикл для получения имен всех подпапок в объекте папки
For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr Здесь мы использовали a для каждого цикла, чтобы пройти через каждую подпапку в объекте файла fdr. Мы использовали свойство SubFolders файлового объекта для цикла.
Мы используем свойство name, чтобы получить имена каждой подпапки. И это сделано.
Пример 2: Получить все пути к файлам в папке и ее подпапках Чтобы получить все пути или полные имена всех файлов в папке и ее подпапке, нам нужно добавить еще несколько строк в код примера 1.
Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File 'to store file object fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop throgh each file Debug.Print fl.Path 'getting file name Next fl Next subfdr 'to get the files of main folder For Each fl In fdr.Files Debug.Print fl.Path Next fl End Sub
Метод Folder.Files () — это метод, который возвращает файлы из подпапки. Метод File.Path () возвращает полный адрес файла. У каждого из нас есть внутренний цикл для перебора всех файлов в подпапке основной папки и ее. Чтобы получить файлы из основной папки, мы используем еще один цикл.
Пример 3: Сохраните имена файлов в файле CSV.
В предыдущем примере мы узнали, как печатать пути к файлам определенных папок в непосредственном окне. В этом примере мы узнаем, как сохранить эти пути в файле CSV. Для этого нам просто нужно добавить в код несколько строк. См. Строки кода жирным шрифтом ниже.
Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Folder ' Variable for the base folder Dim subfdr As Folder ' Variable for the sub folders Dim fdrpath As String 'to store path of base folder Dim fl As File 'to store file object Dim fileList As TextStream 'A textstream object fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False) 'loop to get all the sub folders name in For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files 'to loop through each file fileList.Write fl.Path & "," Next fl Next subfdr 'to get the files of main folder For Each fl In fdr.Files fileList.Write fl.Path & "," Next fl fileList.Close End Sub
Здесь мы объявили новый объект типа FileStream с именем
fileList
Мы инициализировали переменную filelist с помощью объекта filestream, используя следующую строку.
Установите fileList = fso.CreateTextFile (fdrpath & «\ File List in This Folder.csv», True, False) Мы используем метод CreateTextFile из FSO для создания объекта FileStream.
Создает текстовый файл. Этот метод принимает имя файла с полным путем. Так делает первая переменная. Мы используем расширение .csv для создания файла csv. Вторая переменная используется для перезаписи.
Третий аргумент — False, чтобы объявить, что это не двоичный файл. В циклах мы заменяем debug.print методом filelist.Write для записи каждого пути к файлу в созданном файле. Так что да, ребята, вот как вы можете использовать FileSystemObject. FSO можно использовать для многих других вещей, которые мы обсудим в следующих статьях. Если у вас есть какие-либо сомнения по поводу этой статьи запроса, связанного с FSO, спросите меня в разделе комментариев ниже.
Статьи по теме:
link: / applications-word-outlook-in-vba-Getting-started-with-excel-vba-userforms [Начало работы с пользовательскими формами Excel VBA]
| * Я объясню, как создать форму в Excel, как использовать Панель инструментов VBA, как обрабатывать вводимые пользователем данные и, наконец, как хранить вводимые пользователем данные. Мы рассмотрим эти темы на одном примере и пошаговом руководстве.
link: / general-themes-in-vba-vba-variables-in-excel [переменные VBA в Excel]
| * VBA означает Visual Basic для приложений.
Это язык программирования от Microsoft. Он используется с приложениями Microsoft Office, такими как MSExcel, MS-Word и MS-Access, тогда как переменные VBA являются конкретными ключевыми словами.
link: / general-themes-in-vba-excel-vba-variable-scope [Область переменных Excel VBA]
| * Во всех языках программирования у нас есть спецификаторы доступа к переменным, которые определяют, откуда можно получить доступ к определенной переменной. Excel VBA — не исключение. VBA тоже имеет спецификаторы области видимости.
link: / cells-range-rows-and-columns-in-vba-what-is-the-difference-between-byref-and-byval-arguments-vba-интервью-question [ByRef and ByVal Arguments]
| Когда аргумент передается как аргумент ByRef в другую подпрограмму или функцию, отправляется ссылка на фактическую переменную. Любые изменения, внесенные в копию переменной, будут отражены в исходном аргументе.
link: / files-workbook-and-worksheets-in-vba-delete-sheet-without-confirm-prompts-using-vba-in-microsoft-excel [Удалять листы без запросов подтверждения с помощью VBA в Microsoft Excel]
| Поскольку вы удаляете листы с помощью VBA, вы знаете, что делаете.
Вы хотите, чтобы Excel не показывал это предупреждение и не удалял этот проклятый лист.
link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Добавить и сохранить новую книгу с помощью VBA в Microsoft Excel 2016] | В этом коде мы сначала создали ссылку на объект книги. А затем мы инициализировали его новым объектом книги. Преимущество этого подхода заключается в том, что вы можете легко выполнять операции с этой новой книгой. Например, сохранение, закрытие, удаление и т. Д. Display A Message On Строка состояния Excel VBA * | Строку состояния в Excel можно использовать как монитор кода. Когда ваш код VBA длинный и вы выполняете несколько задач с помощью VBA, вы часто отключаете обновление экрана, чтобы не видеть мерцания экрана.
link: / general-themes-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Отключить предупреждающие сообщения с помощью VBA в Microsoft Excel 2016]
| * Этот код отключает не только VBA предупреждения, но также увеличивает временную эффективность кода. Посмотрим как.
Популярные статьи:
link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-повышения-продуктивность [50 сочетаний клавиш Excel для повышения производительности]
| Выполняйте свою задачу быстрее. Эти 50 ярлыков заставят вас работать в Excel еще быстрее.
link: / формулы-и-функции-введение-функции-vlookup [Функция ВПР в Excel]
| Это одна из самых используемых и популярных функций Excel, которая используется для поиска значений из разных диапазонов и листов. link: / tips-countif-in-microsoft-excel [COUNTIF в Excel 2016]
| Подсчитайте значения с условиями, используя эту удивительную функцию. Вам не нужно фильтровать данные для подсчета определенных значений.
Функция Countif важна для подготовки вашей приборной панели.
link: / excel-formula-and-function-excel-sumif-function [Как использовать функцию СУММЕСЛИ в Excel]
| Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.