Използване на VBA FileSystemObject (FSO) в Excel - Лесен преглед и примери

Когато използваме VBA в Excel, повечето от тях са за автоматизиране на нашите задачи.

Това също означава, че през повечето време работим с клетки и диапазони, работни листове, работни книги и други обекти, които са част от приложението Excel.

Но VBA е много по -мощен и може да се използва и за работа с неща извън Excel.

В този урок ще ви покажа как да използвате VBA FileSystemObject (FSO) за работа с файлове и папки на вашата система или мрежови устройства.

Какво е VBA FileSystemObject (FSO)?

FileSystemObject (FSO) ви позволява достъп до файловата система на вашия компютър. С него можете да осъществявате достъп и да променяте файловете/папките/директориите във вашата компютърна система.

Например по -долу са някои от нещата, които можете да направите, като използвате FileSystemObject в Excel VBA:

  • Проверете дали съществува файл или папка.
  • Създавайте или преименувайте папки/файлове.
  • Вземете списък с всички имена на файлове (или имена на подпапки) в папка.
  • Копирайте файлове от една папка в друга.

Надявам се да схванете идеята.

Ще разгледам всички тези горни примери (плюс още) по -късно в този урок.

Докато някои от нещата, споменати по -горе, могат да бъдат направени и с помощта на традиционни VBA функции (като функцията DIR) и методи, това би довело до по -дълги и по -сложни кодове. FileSystemObject улеснява работата с файлове и папки, като същевременно поддържа кода чист и кратък.

Забележка: FSO може да се използва само в Excel 2000 и по -нови версии.

До какви обекти можете да получите достъп чрез FileSystemObject?

Както споменах по -горе, можете да осъществявате достъп и да променяте файлове и папки с помощта на FileSystemObject във VBA.

По -долу е дадена таблица, която показва най -важните обекти, до които можете да получите достъп и да промените с помощта на FSO:

Обект Описание
Карайте Drive Object ви позволява да получите информация за устройството, например дали съществува или не, името на пътя, типа на устройството (сменяемо или фиксирано), неговия размер и т.н.
Папка Обектът на папка ви позволява да създавате или променяте папки във вашата система. Например можете да създавате, изтривате, преименувате, копирате папки с помощта на този обект.
Файл File Object ви позволява да работите с файлове във вашата система. Например можете да създавате, отваряте, копирате, премествате и изтривате файлове с помощта на този обект.
TextStream Обектът TextStream ви позволява да създавате или четете текстови файлове.

Всеки от горните обекти има методи, които можете да използвате, за да работите с тях.

За да ви дадем пример, ако искате да изтриете папка, ще използвате метода DeleteFolder на обекта Folder. По същия начин, ако искате да копирате файл, ще използвате метода CopyFile на обекта File.

Не се притеснявайте, ако това изглежда преобладаващо или трудно за разбиране. Ще разберете много по -добре, когато разгледате примерите, които разгледах в този урок.

Само за справка, разгледах всички методи на FileSystemObject (за всеки обект) в края на този урок.

Активиране на FileSystemObject в Excel VBA

FileSystemObject не е наличен по подразбиране в VBA на Excel.

Тъй като имаме работа с файлове и папки, които са извън приложението Excel, първо трябва да създадем препратка към библиотеката, която съдържа тези обекти (устройства, файлове, папки).

Сега има два начина, по които можете да започнете да използвате FileSystemObject в Excel VBA:

  1. Задаване на препратка към Microsoft Scripting Runtime Library (Scrrun.dll)
  2. Създаване на обект, който да се позовава на библиотеката от самия код

Докато и двата метода работят (и ще ви покажа как да направите това по -нататък), препоръчвам да използвате първия метод.

Забележка: Когато активирате FileSystemObject, можете да получите достъп до всички обекти в него. Това включва FileSystemObject, Drive, Files, Folders и др. В този урок ще се съсредоточа основно върху FileSystemObject.

Задаване на препратка към библиотеката за изпълнение на Microsoft Scripting Runtime

Когато създавате препратка към библиотеката за изпълнение на скриптове, разрешавате на Excel VBA достъп до всички свойства и методи на файлове и папки. След като това е направено, можете да се обърнете към обекта файлове/папки/дискове от Excel VBA (точно както можете да препратите към клетки, работни листове или работни книги).

По -долу са стъпките за създаване на препратка към библиотеката за изпълнение на Microsoft Scripting Runtime:

  1. В редактора на VB щракнете върху Инструменти.
  2. Кликнете върху Препратки.
  3. В диалоговия прозорец Референции, който се отваря, превъртете през наличните препратки и проверете опцията „Microsoft Scripting Runtime“.
  4. Щракнете върху OK.

Горните стъпки сега ще ви позволят да се позовавате на FSO обектите от Excel VBA.

Създаване на екземпляр на FileSystemObject в кода

След като зададете препратката към библиотеката Scripting FileSystemObject, трябва да създадете екземпляр на FSO обекта във вашия код.

След като това бъде създадено, можете да го използвате във VBA.

По -долу е кодът, който ще зададе променливата на обекта MyFSO като обект FileSystemObject:

Sub CreatingFSO () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject End Sub

В този код първо декларирах променливата MyFSO като обект тип FileSystemObject. Това е възможно само защото създадох препратка към библиотеката за изпълнение на Microsoft Scripting Runtime. Ако препратката не е създадена, това ще ви даде грешка (тъй като Excel няма да разпознае какво означава FileSystemObject).

Във втория ред се случват две неща:

  1. Ключовата дума NEW създава екземпляр на FileSystemObject. Това означава, че сега мога да използвам всички методи на FileSystemObject за работа с файлове и папки. Ако не създадете този екземпляр, няма да имате достъп до методите на FSO.
  2. Ключовата дума SET задава обекта MyFSO на този нов екземпляр на FileSystemObject. Това ми позволява да използвам този обект за достъп до файлове и папки. Например, ако трябва да създам папка, мога да използвам метода MyFSO.CreateFolder.

Ако искате, можете също да комбинирате горните две твърдения в едно, както е показано по -долу:

Sub Създаване на FSO () Затъмнете MyFSO като нов FileSystemObject End Sub

Голямо предимство от използването на този метод (което е да зададете препратка към библиотеката на Microsoft Scripting Runtime Library) е, че когато използвате FSO обектите в кода си, ще можете да използвате функцията IntelliSense, която показва методите и свойствата, свързани с обект (както е показано по -долу).

Това не е възможно, когато създавате препратка от кода (покрит по -долу).

Създаване на обект от кода

Друг начин да създадете препратка към FSO е като го направите от кода. В този метод не е необходимо да създавате препратки (както е направено в предишния метод).

Когато пишете кода, можете да създадете обект от кода и да се обърнете към Scripting.FileSystemObject.

Кодът по -долу създава обект FSO и след това го прави тип FileSystemObject.

Sub FSODemo () Dim FSO As Set Object FSO = CreateObject ("Scripting.FileSystemObject") End Sub

Въпреки че това може да изглежда по -удобно, голям недостатък на използването на този метод е, че той няма да показва IntelliSense, когато работите с обекти във FSO. За мен това е огромен негатив и винаги препоръчвам да използвам предишния метод за активиране на FSO (което е чрез задаване на препратка към „Microsoft Scripting Runtime“)

Примери за VBA FileSystemObject

Сега нека се потопим и да разгледаме някои практически примери за използване на FileSystemObject в Excel.

Пример 1: Проверете дали файл или папка съществуват

Следният код ще провери дали папката с името „Тест“ съществува или не (на посоченото място).

Ако папката съществува, условието IF е True и показва съобщение - „Папката съществува“ в поле за съобщение. И ако не съществува, показва съобщение - Папката не съществува “.

Sub CheckFolderExist () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FolderExists ("C: \ Users \ sumit \ Desktop \ Test") Тогава MsgBox "Папката съществува" Друго MsgBox "Папката не съществува" Край, ако свършва Под

По същия начин можете също да проверите дали файл съществува или не.

Кодът по -долу проверява дали има файл с името Test.xlsx в посочената папка или не.

Sub CheckFileExist () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FileExists ("C: \ Users \ sumit \ Desktop \ Test \ Test.xlsx") Тогава MsgBox "Файлът съществува" Друг MsgBox "Файлът не съществува „Край, ако край Sub

Пример 2: Създайте нова папка в посоченото местоположение

Кодът по -долу ще създаде папка с името „Тест“ в устройството C на моята система (ще трябва да посочите пътя във вашата система, където искате да създадете папката).

Sub CreateFolder () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject MyFSO.CreateFolder ("C: \ Users \ sumit \ Desktop \ Test") End Sub

Въпреки че този код работи добре, той ще покаже грешка, в случай че папката вече съществува.

Кодът по -долу проверява дали папката вече съществува и създава папка, ако не съществува. В случай, че папката вече съществува, тя показва съобщение. За да проверя дали папката съществува, използвах Метод FolderExists на FSO.

Sub CreateFolder () Dim MyFSO As FileSystemObject Set MyFSO = New FileSystemObject If MyFSO.FolderExists ("C: \ Users \ sumit \ Desktop \ Test") Тогава MsgBox "Папката вече съществува" Иначе MyFSO.CreateFolder ("C: \ Users \ sumit \ Desktop \ Test ") End If End Sub

Пример 3: Вземете списък с всички файлове в папка

Кодът по -долу ще покаже имената на всички файлове в посочената папка.

Sub GetFileNames () Dim MyFSO As FileSystemObject Dim MyFile As File Dim MyFolder As Folder Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder ("C: \ Users \ sumit \ Desktop \ Test") За всеки MyFile в MyFolder.Fi Debug.Print MyFile.Name Next MyFile End Sub

Този код е малко по -сложен от тези, които вече видяхме.

Както споменах по -горе в този урок, когато се позовавате на „Microsoft Scripting Runtime Library“, можете да използвате FileSystemObject, както и всички други обекти (като файлове и папки).

В горния код използвам три обекта - FileSystemObject, File и Folder. Това ми позволява да преглеждам всеки файл в посочената папка. След това използвам свойството name, за да получа списъка с всички имена на файлове.

Обърнете внимание, че използвам Debug.Print, за да получа имената на всички файлове. Тези имена ще бъдат изброени в непосредствения прозорец на VB Editor.

Пример 4: Вземете списъка с всички подпапки в папка

Кодът по-долу ще даде имената на всички подпапки в посочената папка. Логиката е точно същата, както е описана в горния пример. Вместо файлове, в този код сме използвали подпапки.

Sub GetSubFolderNames () Dim MyFSO As FileSystemObject Dim MyFile As File Dim MyFolder As Folder Dim MySubFolder As Folder Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder ("C: \ Users \ sumit \ Desktop MyBob" В MyFolder.SubFolders Debug.Print MySubFolder.Name Next MySubFolder End Sub

Пример 5: Копирайте файл от едно място на друго

Кодът по -долу ще копира файла от папката „Източник“ и ще го копира в папката „Дестинация“.

Sub CopyFile () Dim MyFSO As FileSystemObject Dim Source SourceFile As String Dim DestinationFolder As String Set MyFSO = New Scripting.FileSystemObject SourceFile = "C: \ Users \ sumit \ Desktop \ Source \ SampleFile.xlsx" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination "MyFSO.CopyFile Източник: = SourceFile, Destination: = DestinationFolder &" \ SampleFileCopy.xlsx "End Sub

В горния код използвах две променливи - SourceFile и DestinationFolder.

Изходният файл съдържа адреса на файла, който искам да копирам, а променливата DestinationFolder съдържа адреса на папката, в която искам да се копира файлът.

Обърнете внимание, че не е достатъчно да дадете името на папката на местоназначението, когато копирате файл. Също така трябва да посочите името на файла. Можете да използвате същото име на файл или да го промените. В горния пример копирах файла и го нарекох SampleFileCopy.xlsx

Пример 6: Копирайте всички файлове от една папка в друга

Кодът по -долу ще копира всички файлове от папката Източник в папката местоназначение.

Sub CopyAllFiles () Dim MyFSO като FileSystemObject Dim MyFile като File Dim SourceFolder As String Dim DestinationFolder As String Dim MyFolder As Folder Dim MySubFolder As Folder SourceFolder = "C: \ Users \ sumit \ Desktop \ Source" DestinationFolder = "C: \ Users \ sumit \ Desktop \ Destination "Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder (SourceFolder) За всеки MyFile в MyFolder.Files MyFSO.CopyFile Източник: = MyFSO.GetFile (MyFile), _ Destination: = Desto "& MyFile.Name, Overwritefiles: = False Next MyFile End Sub

Горният код ще копира всички файлове от папката „Източник“ в целевата папка.

Обърнете внимание, че в метода MyFSO.CopyFile съм посочил свойството ‘Overwritefiles’ на False (това е True по подразбиране). Това гарантира, че в случай че вече имате файла в папката, той не се копира (и ще видите грешка). Ако премахнете „Overwritefiles“ или зададете това на True, в случай че в целевата папка има файлове със същото име, те ще бъдат презаписани.

Професионален съвет: Когато копирате файлове, винаги има шанс да презапишете файлове. Добра идея в този случай е да добавите времевата отметка заедно с името. Това ще гарантира, че имената винаги са различни и лесно можете да проследите кои файлове са били копирани по кое време.

Ако искате да копирате файловете само с определено разширение, можете да направите това, като използвате оператора IF Then, за да проверите дали разширението е xlsx или не.

Sub CopyExcelFilesOnly () Dim MyFSO As FileSystemObject Dim MyFile As File Dim SourceFolder As String Dim DestinationFolder As String Dim MyFolder As Folder Dim MySubFolder As Folder SourceFolder = "C: \ Users \ sumit \ Desktop \ Source" DestinationFolder = "C: sumit \ Desktop \ Destination "Set MyFSO = New Scripting.FileSystemObject Set MyFolder = MyFSO.GetFolder (SourceFolder) За всеки MyFile в MyFolder.Files Ако MyFSO.GetExtensionName (MyFile) =" xlsx "Тогава MyFSO.CopyFile Източник: (MyFile), _ Destination: = DestinationFolder & "\" & MyFile.Name, Overwritefiles: = False End If Next MyFile End Sub

Методи на FileSystemObject (FSO)

Ето методите, които можете да използвате за всеки обект. Това е само за справка и не се притеснявайте твърде много за това. Използването на някои от тях е показано в примерите, разгледани по -горе.

Методи на FSO За обект Описание
DriveExists Карайте Проверява дали устройството съществува или не
GetDrive Карайте Връща екземпляр на задвижващия обект въз основа на посочения път
GetDriveName Карайте Повторява името на устройството
BuildPath Папка Генериране на път от съществуващ път и име
CopyFile Папка Копира файл
GetAbsolutePathName Папка Връща каноничното представяне на пътя
GetBaseName Папка Върнете основното име от път. Например „D: \ TestFolder \ TestFile.xlsm“ ще върне TextFile.xlsm
GetTempName Папка Генерирайте име, което може да се използва за именуване на временен файл
CopyFolder Папка Копира папка от едно място на друго
Създай папка Папка Създава нова папка
DeleteFolder Папка Изтрива посочената папка
Папка Съществува Папка Проверява дали папката съществува или не
GetFolder Папка Връща екземпляр на обекта на папката въз основа на посочения път
GetParentFolderName Папка Повтаря името на родителската папка въз основа на посочения път
GetSpecialFolder Папка Вземете местоположението на различни системни папки.
MoveFolder Папка Премества папка от едно място на друго
Изтрий файла Файл Изтрива файл
Файлът съществува Файл Проверява дали файл съществува или не
GetExtensionName Файл Връща разширението на файла
GetFile Файл Връща екземпляра на файлов обект въз основа на посочения път
GetFileName Файл Връща името на файла
GetFileVersion Файл Връща версията на файла
MoveFile Файл Премества файл
CreateTextFile Файл Създава текстов файл
GetStandardStream Файл Извличане на стандартния вход, изход или поток от грешки
OpenTextFile Файл Отворете файл като TextStream

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave