Використання FileSystemObject в Excel VBA

Використання FileSystemObject (FSO) у Excel VBA

FileSystemObject (FSO) надає вам доступ до цілого ряду функцій для доступу до файлової системи вашого комп’ютера. Використовуючи цей об'єкт, ви можете легко отримати доступ до файлів, папок та дисків, а також читати та записувати у файли.

Багато функцій FSO можна написати вами у традиційній VBA, але вимагатимуть більшого кодування, а вхідному розробнику буде складніше підтримувати та розуміти. FSO - перевірений API (інтерфейс прикладного програмування) і є більш надійним, ніж ваш власний код. Він простий у використанні, готовий і доступний.

FSO працює відповідно до міжнародних стандартів та налаштувань, які є у вас на комп’ютері. Якщо ви розповсюджуєте свою програму Excel у всьому світі, то за допомогою FSO ви впораєтесь з будь -якими відмінностями в налаштуваннях між країнами, що виникне у власного коду.

FSO дозволить вам робити майже все у коді VBA, що ви могли б зробити у Провіднику файлів Windows. Це дає вам повний доступ до файлової системи Windows.

Створення FileSystemObject

FileSytemObject не є частиною Excel VBA. Ви можете використовувати FSO, створивши об'єкт (пізнє прив'язка) у VBA:

123 Sub CreateFSO ()Встановити MyFSO = CreateObject ("Scripting.FileSystemObject")End Sub

Крім того, ви можете додати посилання у VBA для бібліотеки FSO. Це називається ранньою прив’язкою, і це швидше, ніж пізнє прив’язування, оскільки об’єкт не потрібно створювати під час запуску коду.

Щоб додати посилання, вам потрібно натиснути клавіші Alt-F11, щоб увійти до редактора Visual Basic (VBE), а потім скористатися "Інструменти | Посилання" з меню VBE. У цьому вікні з’явиться спливаюче вікно, у якому ви зможете вибрати відповідну посилання (див. Нижче).

Прокрутіть список доступних посилань, доки не побачите "Среда виконання Microsoft Scripting". Поставте прапорець і натисніть OK, і бібліотека тепер є частиною вашої програми.

Розташування файлу бібліотеки DLL - C: \ Windows \ SysWOW64 \ scrrun.dll

Якщо ви розповсюджуєте свою заявку іншим колегам або місцеположенням, важливо, щоб вони зберігали цей файл у правильному місці на своєму комп’ютері, інакше у вашому коді буде помилка.

Варто розмістити пастку помилок у події "WorkbookOpen" за допомогою команди Dir, щоб перевірити наявність файлу. Якщо він відсутній, дайте попереджувальне повідомлення та закрийте файл Excel.

Після додавання посилання можна створити такий код для створення FSO:

123 Підтест FSO ()Затемнити MyFSO як новий FileSystemObjectEnd Sub

Усі приклади в цій статті будуть використовувати цю методологію для створення FSO.

FSO має багато доступних методів та властивостей. Вони поділяються тут на розділи відповідно до того, що вони можуть зробити.

Використовуючи методи «Існує»

Ви можете скористатися методом FSO, щоб перевірити, чи існує диск, папка чи файл. Ці методи прості у використанні і вимагають лише одного параметра.

123456 Sub CheckExistance ()Затемнити MyFSO як новий FileSystemObjectMsgBox MyFSO.DriveExists ("C:")MsgBox MyFSO.FolderExists ("C: \ temp \")MsgBox MyFSO.FileExists ("C: \ temp \ testfile.txt")End Sub

Усі ці твердження повертатимуть «True», якщо припустити, що на вашому комп’ютері є диск C:, папка на ньому під назвою «Temp» і файл у папці Temp під назвою «testfile.txt»

Текстові рядки в параметрах не враховують регістр. Ви не можете використовувати підстановні знаки жодним із цих методів.

Ви також не можете використовувати URL -адреси (єдині локатори ресурсів) для опису розташування папки або файлу. FSO працює виключно з операційною системою Windows та її файловою системою. Для розташування зовнішнього сервера вам потрібно насамперед зіставити диск із цим, а потім використовувати сам шлях до диска.

Використовуючи методи "Отримати"

FSO має численні методи отримання інформації про файл і шлях, або розбиваючи шлях і файл, або отримуючи інформацію про файл або папку, таку як дата створення або дата зміни.

GetAbsolutePathname

Це забезпечить повний шлях від кореня зазначеного диска.

Синтаксис такий:

GetAbsolutePathName (pathspec)

12345 Sub AbsolutePath ()Затемнити MyFSO як новий FileSystemObject, Pth як рядокPth = "c: …"MsgBox MyFSO.GetAbsolutePathName (Pth)End Sub

Це поверне рядок "C: \ Users \ Richard \ Documents". Це пояснюється тим, що шлях був вказаний як C: після нього три точки. Кожна крапка означає наступний рівень у структурі папок.

GetBaseName

Це повертає ім'я вказаного файлу або папки.

Синтаксис такий:

GetBaseName(шлях)

12345 Sub BaseName ()Затемнити MyFSO як новий FileSystemObject, Pth як рядокPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetBaseName (Pth)End Sub

Цей код поверне "testfile". Метод повертає останній розділ у назві шляху. Якщо це файл, то він не повертає суфікс файлу.

Якщо шлях не вдається знайти, повертається порожній рядок.

GetDrive

Це дозволяє використовувати код для доступу до інформації про диск на основі зазначеної букви диска.

Синтаксис такий:

GetDrive (Drivespec)

123456 Sub DriveInfo ()Затемнити MyFSO як новий FileSystemObject, Pth як рядок, Dr як дискPth = "C:"Встановити Dr = MyFSO.GetDrive (Pth)MsgBox Dr.FreeSpaceEnd Sub

Цей метод повертає об’єкт диска на основі зазначеного диска. Ви можете використовувати цей об’єкт для доступу до інформації про накопичувач, наприклад вільного місця.

Втомилися від пошуку прикладів коду VBA? Спробуйте AutoMacro!

GetDriveName

Цей метод відокремлює назву диска від рядка шляху / імені файлу.

Синтаксис такий:

GetDriveName (шлях)

12345 Додаткове ім'я диска ()Затемнити MyFSO як новий FileSystemObject, Pth як рядокPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetDriveName (Pth)End Sub

Це поверне "C:"

GetExtensionName

Це поверне суфікс файлу у вказаному шляху.

Синтаксис такий:

GetExtensionName (шлях)

12345 Sub ExtensionName ()Затемнити MyFSO як новий FileSystemObject, Pth як рядокPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetExtensionName (Pth)End Sub

Це поверне "txt".

Якщо файл не вказано, повертається порожній рядок.

GetFile

Цей метод повертає об’єкт файлу, який містить різну інформацію про сам файл.

Синтаксис такий:

GetFile (filepec)

123456 Sub FileInfo ()Затемнити MyFSO як новий FileSystemObject, Pth як рядок, Fn як файлPth = "C: \ temp \ testfile.txt"Встановіть Fn = MyFSO.GetFile (Pth)MsgBox Fn.DateCreatedEnd Sub

Це поверне дату та час створення зазначеного файлу. Якщо файл не вказано або файл не існує, ви отримаєте помилку "файл не знайдено".

12345 Додаткова назва файлу ()Затемнити MyFSO як новий FileSystemObject, Pth як рядокPth = "C: \ temp \ testfile.txt"MsgBox MyFSO.GetFileName (Pth)End Sub

Це поверне "testfile.txt".

GetFolder

Це створює об’єкт папки для базової папки у вказаному шляху. Шлях повинен містити лише назви папок. Імена файлів не повинні бути включені, інакше станеться помилка.

Синтаксис такий:

GetFolder (folderspec)

123456 Інформація про підпапку ()Затемнити MyFSO як новий FileSystemObject, Pth як рядок, Fo як папкуPth = "C: \ temp"Встановити Fo = MyFSO.GetFolder (Pth)MsgBox Fo.DateCreatedEnd Sub

Об'єкт папки містить різну інформацію, до якої можна отримати доступ. У цьому випадку він повертає дату створення папки.

Ви також можете скористатися цим методом, щоб отримати всі імена файлів у даній папці:

12345678 Додаткові назви файлів ()Затемнити MyFSO як новий FileSystemObject, Pth як рядок, Fo як папку, Fn як файлPth = "C: \ temp"Встановити Fo = MyFSO.GetFolder (Pth)Для кожного файлу Fn у файлах Fo.FilesMsgBox Fn.NameДалі FnEnd Sub

Цей код буде повторюватись у папці «Temp» і відображатиме кожну знайдену назву файлу.

GetParentFolderName

Цей метод поверне ім’я папки на наступному рівні в ієрархії папок.

Синтаксис такий:

GetParentFolderName (шлях)

12345 Назва підпапки ()Затемнити MyFSO як новий FileSystemObject, Pth як рядок, Fo як папкуPth = "C: \ users \ richard"MsgBox MyFSO.GetParentFolderName (Pth)End Sub

Це поверне "Користувачів", оскільки це "батько" для папки "Річард".

Програмування VBA | Генератор коду працює для вас!

Використовуючи методи «Створення»

За допомогою FSO ви можете створити нову папку та шлях та створити текстовий файл.

CreateFolder

Ви можете вказати нову назву шляху до папки для створення. Небезпека цього полягає в тому, що якщо папка вже існує, то станеться помилка. Ви можете скористатися методом "FolderExists", щоб переконатися, що цього не станеться.

Синтаксис такий:

CreateFolder(назва папки)

1234567 Sub CreateNewFolder ()Затемнити MyFSO як новий FileSystemObject, Pth як рядокPth = "C: \ temp \ MyFolder"Якщо MyFSO.FolderExists (Pth) = False ТодіMyFSO.CreateFolder (Pth)Закінчити ЯкщоEnd Sub

Цей код створить нову папку під назвою «MyFolder» під існуючим шляхом «C: \ temp».

CreateTextFile

Цей метод дозволяє створювати простий текстовий файл і писати безпосередньо в нього.

Синтаксис такий:

CreateTextFile (ім'я файлу, [ перезаписати, [ Юнікод ]])

1234567 Sub CreateTextFile ()Затемнити MyFSO як новий FileSystemObject, Pth як рядокPth = "C: \ temp \ Myfile.txt"Встановіть Fn = MyFSO.CreateTextFile (Pth, True)Fn.Write "Додати власний текст тут" & vbLf & "Це другий рядок"Fn.ЗакритиEnd Sub

Цей код створює текстовий файл під назвою “Myfile.txt” у папці “Temp” на диску “C:”, а потім записує до нього два рядки тексту.

Зауважте, що символ подачі рядка об'єднаний у рядок, що записується.

Якщо шлях, на який ви пишете, не існує, то станеться помилка. Ви можете скористатися методом "FolderExists", щоб перевірити це перед створенням файлу.

Існує необов’язковий параметр для перезапису існуючого файлу, якщо це необхідно - це може бути Істина або Неправда. Типовим значенням є True.

Використовуючи методи «Копіювати»

Ви можете використовувати ці методи, щоб скопіювати файл або папку в інше місце.

Програмування VBA | Генератор коду працює для вас!

CopyFile

Цей метод буде копіювати файл з однієї папки в іншу. Зауважте, що копіювання не вдасться, якщо місце призначення має встановлений атрибут лише для читання.

Синтаксис такий:

CopyFile джерело, призначення, [ перезаписати ]

1234 Sub CopyFile ()Затемнити MyFSO як новий FileSystemObjectMyFSO.CopyFile "C: \ temp \*. Txt", "C: \ temp \ myfolder \", ІстинаEnd Sub

Цей код зробить копію всіх текстових (txt) файлів у "C: \ temp" у "C: \ temp \ myfolder \", переписуючи файл там, де це необхідно. За промовчанням для Overwrite є True.

Ви можете використовувати підстановку зірочки (*) для імен файлів, але не можете використовувати знак підписку (?) Для представлення окремих символів.

CopyFolder

Ви можете використовувати цей метод для копіювання всієї папки з одного місця в інше.

Синтаксис такий:

CopyFolder джерело, призначення, [ перезаписати ]

1234 Підкопійна папка ()Затемнити MyFSO як новий FileSystemObjectMyFSO.CopyFolder "C: \ temp \*", "C: \ users \ richard \"End Sub

Цей код копіює всі папки та файли нижче "C: \ temp" у "C: \ users \ richard". Створена нова папка буде "C: \ users \ richard \ myfolder", оскільки "C: \ temp" містить папку "myfolder".

При використанні цього методу можливі чотири результати:

  • Якщо пункт призначення не існує, то вихідна папка та вміст копіюються.
  • Якщо пункт призначення вже існує, виникає помилка.
  • Якщо місце призначення - це папка, буде скопійовано вихідну папку та її вміст. Помилка виникне, якщо для параметра Overwrite встановлено значення False, а в адресі вже є копія файлу.
  • Якщо пункт призначення призначений лише для читання, помилка станеться, якщо для заміни встановлено значення false.

Цей метод зупиняється на першій помилці, з якою він стикається. Немає відкоту будь -яких дій, які були успішні до виникнення помилки.

Використовуючи методи «переміщення»

Ці методи можна використовувати для переміщення файлів або папок в інші місця. Це те саме, що вирізати з одного місця та вставити в інше. Зауважте, що якщо файл, який потрібно перемістити, відкритий, то метод Move вийде з ладу з помилкою.

Перемістити файл

Цей метод використовується для переміщення певного файлу в інше місце. Дорожні символи дозволені в компоненті останнього шляху джерела.

Синтаксис такий:

Перемістити файл джерело, призначення

1234 Sub MoveAFile ()Затемнити MyFSO як новий FileSystemObjectMyFSO.MoveFile "C: \ temp \*", "C: \ temp \ myfolder"End Sub

Цей код переміщує всі файли, знайдені у "C: \ temp", у "C: \ temp \ myfolder".

Папки джерела та цілі мають існувати, оскільки папка призначення не створюється автоматично.

Цей метод зупиняється на першій помилці, з якою він стикається. Немає відкоту будь -яких дій, які були успішні до виникнення помилки.

Програмування VBA | Генератор коду працює для вас!

Перемістити папку

Цей метод переміщує певну папку з одного місця в інше.

Синтаксис такий:

Перемістити папку (джерело, призначення)

1234 Sub MoveAFolder ()Затемнити MyFSO як новий FileSystemObjectMyFSO.MoveFolder "C: \ temp \ myfolder", "C: \ temp \ mydestination"End Sub

Цей код переміщує папку "моя папка" та її вміст у папку "моя ціль". "Моя папка" ефективно видаляється і створюється "мій пункт призначення" разом із вмістом "моєї папки".

Якщо цільова папка вже існує, виникає помилка.

Використовуючи методи «Видалити»

Ці методи використовуються для видалення файлів або папок. Їх слід використовувати обережно, оскільки немає методів відкату або скасування, якщо щось піде не так.

Видалити файл

Це видаляє окремі файли або групу файлів за допомогою символів підстановки.

Синтаксис такий:

Видалити файл filepec, [ силу ]

1234 Sub DeleteFiles ()Затемнити MyFSO як новий FileSystemObjectMyFSO.DeleteFile "C: \ temp \*"End Sub

Цей код видалить усі файли в папці "C: \ temp"

Параметр Force є необов’язковим і має значення True або False. Якщо встановлено значення True, то файли лише для читання будуть видалені. За замовчуванням встановлено значення False.

Видалити папку

Цей метод видаляє вказану папку та її вміст.

Синтаксис такий:

Видалити папку folderspec, [ силу ]

1234 Sub DeleteFolders ()Затемнити MyFSO як новий FileSystemObjectMyFSO.DeleteFolder "C: \ temp \ MyDestination"End Sub

Цей код видалить папку "Моє призначення" та всі файли в цій папці. Папка "temp" залишиться.

Параметр Force є необов’язковим і має значення True або False. Якщо встановлено значення True, папки, призначені лише для читання, будуть видалені. За замовчуванням - False.

Підстановні знаки можна використовувати в останній складовій шляху. Якщо папка не знайдена, то станеться помилка.

Цей метод зупиняється на першій помилці, з якою він стикається. Немає відкоту будь -яких дій, які були успішні до виникнення помилки.

Програмування VBA | Генератор коду працює для вас!

Інші методи у FSO

OpenAsTextStream.

Цей метод відкриває вказаний файл як об’єкт текстового потоку і дозволяє його читати або записувати. Перевага цього методу в тому, що він може відкривати будь -який тип файлу та витягувати доступний текст.

Синтаксис такий:

OpenAsTextStream ([ іомод, [ формату ]])

Параметр ‘iomode’ дозволяє лише читання (1), читання/запис (2) та додавання (8). Параметр читання/запису перезаписує файл.

Параметр "format" встановлено на -2 за замовчуванням системи, -1 для відкриття файлу як Unicode та 0 для відкриття файлу як ASCII (американський стандартний код для обміну інформацією).

1234567891011 Підтекстовий потік тексту ()Затемнити MyFSO як новий FileSystemObjectВстановіть f = MyFSO.GetFile ("C: \ temp \ myfile.txt")Встановіть ts = f.OpenAsTextStream (2)ts.Напишіть "Мій новий текст"ts.ЗакритиВстановіть ts = f.OpenAsTextStream (1)s = ts.ReadLineMsgBox sts.ЗакритиEnd Sub

Цей код отримує існуючий текстовий файл і створює його як об’єкт за допомогою методу «GetFile». Потім він відкриває текстовий потік у вигляді читання / запису (2) і записує рядок тексту. Потім файл закривається і знову відкривається як прочитаний (1), а з нього зчитується рядок, який потім відображається у вигляді вікна повідомлення.

Зауважте, що рядок для читання повинен бути розміщений у змінній, перш ніж він може відображатися у вікні повідомлення.

BuildPath

Цей метод додасть назву папки або файлу до кінця існуючого шляху до папки. Це лише створює текстовий рядок, а фактично не створює нову папку.

Синтаксис такий:

BuildPath (шлях, ім'я)

12345 Sub BuildPth ()Затемнити MyFSO як новий FileSystemObjectnp = MyFSO.BuildPath ("C: \ temp", "ANewFolder")MsgBox npEnd Sub

Буде відображено "C: \ temp \ ANewFolder". Однак, якщо ви дійсно хочете використовувати цю папку, вам потрібно використовувати метод "CreateFolder".

OpenTextFile

Цей метод дозволяє відкривати і читати файли або записувати їх відповідно до заданих параметрів. Він працює подібно до методу OpenAsTextStream.

Синтаксис такий:

OpenTextFile (ім'я файлу, [ іомод, [ створити, [ формату ]]])

Параметр ‘iomode’ дозволяє ForReading, ForWriting та ForAppending. Параметр ForWriting перезаписує файл.

Параметр ‘create’ є булевим значенням. Істина означає, що новий файл буде створено, якщо вказана назва файлу не існує. Неправда означає, що файл не буде створено, якщо ім'я файлу не знайдено. За замовчуванням встановлено значення False.

Параметр "format" можна встановити на TristateFalse, TristateMixed, TristateTrue і TristateUseDefault залежно від того, чи є файл ASCII або Unicode.

1234567 Sub OpenTxtFile ()Затемнити MyFSO як новий FileSystemObjectВстановіть ts = MyFSO.OpenTextFile ("C: \ temp \ myfile.txt", ForReading, False, TristateUseDefault)s = ts.ReadLineMsgBox sts.ЗакритиEnd Sub

Цей код прочитає рядок із текстового файлу "myfile.txt".

Перевага, яку має метод OpenTextFile перед OpenAsTextStreamMethod, полягає в тому, що він має спадні параметри для параметрів, які є більш значущими, ніж спроба запам'ятати відповідні числові значення для різних параметрів параметрів.

Програмування VBA | Генератор коду працює для вас!

Властивості FSO

Приводи

Ця властивість містить колекцію доступних дисків на вашому комп’ютері.

1234567 Sub Drv ()Затемнити MyFSO як новий FileSystemObject, d Як дискВстановіть Dr = MyFSO.DrivesДля кожного d В DrMsgBox d.DriveLetterДалі dEnd Sub

Цей код поверне кожну букву диска, наявну на вашому комп’ютері.

Назва

Це повертає ім'я вказаного файлу або папки.

123456789 Sub NameExample ()Затемнити MyFSO як новий FileSystemObjectВстановіть f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Name & "on Drive" & UCase (f.Drive) & vbCrLfi = i & "Створено:" & f.DateCreated & vbCrLfi = i & "Останній доступ:" & f.DateLastAccessed & vbCrLfi = i & "Остання зміна:" & f.DateLastModifiedMsgBox iEnd Sub

Цей код надасть назву файлу та інформацію про нього за допомогою властивості Диска.

Шлях

Властивість Path відокремлює шлях від специфікації файлу.

123456789 Sub PathExample ()Затемнити MyFSO як новий FileSystemObjectВстановіть f = MyFSO.GetFile ("C: \ temp \ myfile.txt")i = f.Path & f.Name & "на диску" & UCase (f.Drive) & vbCrLfi = i & "Створено:" & f.DateCreated & vbCrLfi = i & "Останній доступ:" & f.DateLastAccessed & vbCrLfi = i & "Остання зміна:" & f.DateLastModifiedMsgBox iEnd Sub

Цей приклад працює так само, як і приклад Ім'я, за винятком того, що тепер він надає шлях до файлу.

Програмування VBA | Генератор коду працює для вас!

Розмір

Властивість Size визначає розмір папки або файлу.

12345 Sub FSize ()Затемнити MyFSO як новий FileSystemObjectВстановіть f = MyFSO.GetFolder ("C: \ temp \")MsgBox f. РозмірEnd Sub

Цей код вище поверне розмір папки "C: \ temp \".

12345 Sub FSize ()Затемнити MyFSO як новий FileSystemObjectВстановіть f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f. РозмірEnd Sub

Цей код вище поверне розмір файлу "myfile.txt".

Тип

Властивість type повертає текст типу файлу або папки.

12345 Sub FType ()Затемнити MyFSO як новий FileSystemObjectВстановіть f = MyFSO.GetFolder ("C: \ temp \")MsgBox f.TypeEnd Sub

Цей код вище поверне текст "Папка файлів".

12345 Sub FType ()Затемнити MyFSO як новий FileSystemObjectВстановіть f = MyFSO.GetFile ("C: \ temp \ myfile.txt")MsgBox f.TypeEnd Sub

Цей код вище поверне текст "Текстовий документ".

Зверніть увагу на використання "GetFolder" та "GetFile" у кожному прикладі.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave