image

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. Проверьте это и нажмите ОК.

image

Теперь вы готовы создать и использовать объект 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. Он также сообщит, какие переменные он примет и какое значение вернет.

image

Если вы поделитесь этим кодом с другими системами, вам придется попросить их добавить ссылку на 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

Когда вы запустите приведенный выше код, вы получите следующее.

image

Да уж! Это моя папка для скачивания. Не зацикливайтесь на этом.

Как это работало?

Давайте разбираться по шагам:

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] | Это еще одна важная функция приборной панели. Это поможет вам суммировать значения для конкретных условий.