Коришћење ВБА ФилеСистемОбјецт (ФСО) у Екцелу - једноставан преглед и примери

Када користимо ВБА у Екцелу, већина је за аутоматизацију наших задатака.

То такође значи да већину времена радимо са ћелијама и опсезима, радним листовима, радним свескама и другим објектима који су део Екцел апликације.

Али ВБА је много моћнији и такође се може користити за рад са стварима изван програма Екцел.

У овом водичу ћу вам показати како да користите ВБА ФилеСистемОбјецт (ФСО) за рад са датотекама и фасциклама на вашем систему или мрежним погонима.

Шта је ВБА ФилеСистемОбјецт (ФСО)?

ФилеСистемОбјецт (ФСО) вам омогућава приступ датотечном систему вашег рачунара. Помоћу њега можете приступити датотекама/фасциклама/директоријумима у свом рачунарском систему и мењати их.

На пример, испод су неке од ствари које можете учинити помоћу ФилеСистемОбјецт у програму Екцел ВБА:

  • Проверите да ли датотека или фасцикла постоје.
  • Креирајте или преименујте фасцикле/датотеке.
  • Набавите листу свих имена датотека (или назива поддиректоријума) у фасцикли.
  • Копирајте датотеке из једне фасцикле у другу.

Надам се да сте схватили идеју.

Касније ћу у овом водичу покрити све ове горе наведене примере (плус још више).

Иако се неке од горе наведених ствари могу урадити и коришћењем традиционалних ВБА функција (попут функције ДИР) ​​и метода, то би довело до дужих и сложенијих кодова. ФилеСистемОбјецт олакшава рад са датотекама и фасциклама, а да код остане чист и кратак.

Напомена: ФСО се може користити само у Екцел 2000 и новијим верзијама.

Којим свим објектима можете приступити путем ФилеСистемОбјецт?

Као што сам горе споменуо, можете приступити датотекама и фасциклама и мењати их помоћу ФилеСистемОбјецт у ВБА.

Испод је табела која приказује најважније објекте којима можете приступити и изменити их помоћу ФСО -а:

Објецт Опис
Погон Дриве Објецт вам омогућава да добијете информације о диску, на пример да ли постоји или не, назив путање, тип диск јединице (уклоњиве или фиксне), величину итд.
Фолдер Објекат фасцикле вам омогућава да креирате или мењате фасцикле у вашем систему. На пример, помоћу овог објекта можете да креирате, бришете, преименујете и копирате фасцикле.
Датотека Филе Објецт вам омогућава рад са датотекама у вашем систему. На пример, помоћу овог објекта можете да креирате, отварате, копирате, премештате и бришете датотеке.
ТектСтреам Објекат ТектСтреам вам омогућава да креирате или читате текстуалне датотеке.

Сваки од горе наведених објеката има методе које можете користити за рад са њима.

На пример, ако желите да избришете фасциклу, користићете методу ДелетеФолдер објекта Фолдер. Слично, ако желите да копирате датотеку, користићете метод ЦопиФиле објекта Филе.

Не брините ако вам се ово чини претешким или га је тешко разумети. Много ћете боље разумети када прођете кроз примере које сам описао у овом водичу.

Само као референцу, обрадио сам све методе ФилеСистемОбјецт (за сваки објекат) на крају овог водича.

Омогућавање ФилеСистемОбјецт у Екцел ВБА

ФилеСистемОбјецт није подразумевано доступан у Екцел ВБА.

Пошто се бавимо датотекама и фасциклама које су изван Екцел апликације, прво морамо да направимо референцу на библиотеку која садржи те објекте (диск јединице, датотеке, фасцикле).

Сада постоје два начина на која можете почети да користите ФилеСистемОбјецт у програму Екцел ВБА:

  1. Постављање референце на Мицрософт Сцриптинг Рунтиме Либрари (Сцррун.длл)
  2. Креирање објекта који се односи на библиотеку из самог кода

Иако обе ове методе функционишу (а ја ћу вам показати како даље), препоручујем да користите прву методу.

Напомена: Када омогућите ФилеСистемОбјецт, можете приступити свим објектима у њему. Ово укључује ФилеСистемОбјецт, Дриве, Филес, Фолдерс, итд. У овом водичу ћу се фокусирати углавном на ФилеСистемОбјецт.

Постављање референце на Мицрософт Сцриптинг Рунтиме Либрари

Када креирате референцу на Сцриптинг Рунтиме Либрари, дозвољавате Екцел ВБА приступ свим својствима и методама датотека и фасцикли. Када то учините, можете се позвати на објекат датотека/фасцикли/дискова из програма Екцел ВБА (баш као што можете упутити ћелије, радне листове или радне свеске).

Испод су кораци за креирање референце на Мицрософт Сцриптинг Рунтиме Либрари:

  1. У ВБ Едитор -у кликните на Тоолс.
  2. Кликните на Референце.
  3. У дијалогу за референце који се отвара, листајте кроз доступне референце и означите опцију „Мицрософт Сцриптинг Рунтиме“.
  4. Притисните ОК.

Горе наведени кораци сада би вам омогућили да се позовете на ФСО објекте из програма Екцел ВБА.

Креирање инстанце датотеке ФилеСистемОбјецт у коду

Када поставите референцу на библиотеку Сцриптинг ФилеСистемОбјецт, потребно је да креирате инстанцу ФСО објекта у свом коду.

Када се ово креира, можете га користити у ВБА.

Испод је код који ће поставити променљиву објекта МиФСО као објекат ФилеСистемОбјецт:

Суб ЦреатингФСО () Дим МиФСО Ас ФилеСистемОбјецт Сет МиФСО = Нев ФилеСистемОбјецт Енд Суб

У овом коду сам прво променио променљиву МиФСО као објекат типа ФилеСистемОбјецт. Ово је могуће само зато што сам креирао референцу на Мицрософт Сцриптинг Рунтиме Либрари. Ако референца није креирана, ово ће вам дати грешку (пошто Екцел не би препознао шта ФилеСистемОбјецт значи).

У другом реду догађају се две ствари:

  1. Кључна реч НЕВ ствара инстанцу ФилеСистемОбјецт. То значи да сада могу да користим све методе ФилеСистемОбјецт -а за рад са датотекама и фасциклама. Ако не креирате ову инстанцу, нећете моћи приступити методама ФСО.
  2. Кључна реч СЕТ поставља објекат МиФСО на ову нову инстанцу ФилеСистемОбјецт. Ово ми омогућава да користим овај објекат за приступ датотекама и фасциклама. На пример, ако морам да направим фасциклу, могу да користим методу МиФСО.ЦреатеФолдер.

Ако желите, такође можете комбиновати горње две изјаве у једну као што је приказано испод:

Под СтварањеФСО () Дим МиФСО као нови ФилеСистемОбјецт Енд Суб

Велика предност коришћења ове методе (а то је постављање референце на Мицрософт Сцриптинг Рунтиме Либрари) је то што ћете, када користите ФСО објекте у свом коду, моћи да користите функцију ИнтеллиСенсе која приказује методе и својства повезана са објекат (као што је приказано испод).

То није могуће када креирате референцу унутар кода (даље у тексту).

Креирање објекта из кода

Други начин да направите референцу на ФСО је да то учините из кода. У овој методи не морате да креирате референцу (као што је учињено у претходној методи).

Када пишете код, можете креирати објекат унутар кода и обратити се на Сцриптинг.ФилеСистемОбјецт.

Доњи код ствара објекат ФСО, а затим га чини типом ФилеСистемОбјецт.

Суб ФСОДемо () Дим ФСО Ас Објецт Сет ФСО = ЦреатеОбјецт ("Сцриптинг.ФилеСистемОбјецт") Крај Суб

Иако ово може изгледати згодније, велики недостатак коришћења ове методе је што не приказује ИнтеллиСенсе када радите са објектима у ФСО -у. За мене је ово велики минус и увек препоручујем коришћење претходног метода омогућавања ФСО -а (а то је постављањем референце на „Мицрософт Сцриптинг Рунтиме“)

Примери ВБА ФилеСистемОбјецт

Хајдемо сада заронити и погледати неке практичне примере коришћења ФилеСистемОбјецт у Екцелу.

Пример 1: Проверите да ли датотека или фасцикла постоје

Следећи код ће проверити да ли фолдер са именом „Тест“ постоји или не (на наведеној локацији).

Ако фасцикла постоји, услов ИФ је Тачан и приказује поруку - „Фолдер постоји“ у оквиру за поруку. А ако не постоји, приказује се порука - Мапа не постоји '.

Суб ЦхецкФолдерЕкист () Дим МиФСО Ас ФилеСистемОбјецт Сет МиФСО = Нев ФилеСистемОбјецт Иф МиФСО.ФолдерЕкистс ("Ц: \ Усерс \ сумит \ Десктоп \ Тест") Затим МсгБок "Мапа постоји" Иначе МсгБок "Мапа не постоји" Прекини ако заврши Суб

Слично томе, такође можете проверити да ли датотека постоји или не.

Код испод проверава да ли у наведеној фасцикли постоји датотека са именом Тест.клск или не.

Суб ЦхецкФилеЕкист () Дим МиФСО Ас ФилеСистемОбјецт Сет МиФСО = Нови ФилеСистемОбјецт Ако МиФСО.ФилеЕкистс ("Ц: \ Усерс \ сумит \ Десктоп \ Тест \ Тест.клск") Затим МсгБок "Датотека постоји" Иначе МсгБок "Датотека не постоји „Крај ако заврши под

Пример 2: Направите нову фасциклу на наведеној локацији

Код испод би створио фасциклу са именом „Тест“ на Ц диску мог система (мораћете да наведете путању на вашем систему где желите да креирате фасциклу).

Под ЦреатеФолдер () Дим МиФСО као ФилеСистемОбјецт Сет МиФСО = Нови ФилеСистемОбјецт МиФСО.ЦреатеФолдер ("Ц: \ Усерс \ сумит \ Десктоп \ Тест") Крај Суб

Иако овај код ради добро, приказао би грешку у случају да фасцикла већ постоји.

Код испод проверава да ли фасцикла већ постоји и креира фасциклу ако не постоји. У случају да фасцикла већ постоји, приказује се порука. Да бих проверио да ли фасцикла постоји, користио сам ФолдерЕкистс метода ФСО.

Суб ЦреатеФолдер () Дим МиФСО Ас ФилеСистемОбјецт Сет МиФСО = Нев ФилеСистемОбјецт Иф МиФСО.ФолдерЕкистс ("Ц: \ Усерс \ сумит \ Десктоп \ Тест") Затим МсгБок "Мапа већ постоји" Иначе МиФСО.ЦреатеФолдер ("Ц: \ Усерс \" сумит \ Десктоп \ Тест ") Енд Иф Енд Суб

Пример 3: Набавите листу свих датотека у фасцикли

Код испод приказује имена свих датотека у наведеној фасцикли.

Под ГетФилеНамес () Дим МиФСО као ФилеСистемОбјецт Дим МиФиле као Филе Дим МиФолдер Ас Фолдер Сет МиФСО = Нев Сцриптинг.ФилеСистемОбјецт Сет МиФолдер = МиФСО.ГетФолдер ("Ц: \ Усерс \ сумит \ Десктоп \ Тест") За сваку МиФиле у МиФолдер.Фи. Дебуг.Принт МиФиле.Наме Нект МиФиле Енд Суб

Овај код је мало сложенији од оних које смо већ видели.

Као што сам горе споменуо у овом водичу, када се позивате на „Мицрософт Сцриптинг Рунтиме Либрари“, можете користити ФилеСистемОбјецт као и све друге објекте (попут датотека и фасцикли).

У горњем коду користим три објекта - ФилеСистемОбјецт, Филе и Фолдер. Ово ми омогућава да прођем кроз сваку датотеку у наведеној фасцикли. Затим користим име својства да добијем листу свих имена датотека.

Имајте на уму да користим Дебуг.Принт да добијем имена свих датотека. Ова имена ће бити наведена у непосредном прозору у ВБ Едитор -у.

Пример 4: Набавите листу свих подмапа у фасцикли

Код испод ће дати имена свих подмапа у наведеној фасцикли. Логика је потпуно иста као што је описано у горњем примеру. Уместо датотека, у овом коду смо користили подмапе.

Суб ГетСубФолдерНамес () Дим МиФСО Ас ФилеСистемОбјецт Дим МиФиле Ас Филе Дим МиФолдер Ас Фолдер Дим МиСубФолдер Ас Фолдер Сет МиФСО = Нев Сцриптинг.ФилеСистемОбјецт Сет МиФолдер = МиФСО.ГетФолдер ("Ц: \ Усерс \ сумит \ Десктоп МиБоб \ Тест \" У МиФолдер.СубФолдерс Дебуг.Принт МиСубФолдер.Наме Следећи МиСубФолдер Енд Суб

Пример 5: Копирајте датотеку са једног места на друго

Код у наставку ће копирати датотеку из фасцикле „Извор“ и копирати је у фасциклу „Одредиште“.

Суб ЦопиФиле () Дим МиФСО Ас ФилеСистемОбјецт Дим СоурцеФиле Ас Стринг Дим ДестинатионФолдер Ас Стринг Сет МиФСО = Нев Сцриптинг.ФилеСистемОбјецт СоурцеФиле = "Ц: \ Усерс \ сумит \ Десктоп \ Соурце \ СамплеФиле.клск" ДестинатионФолдер = "Ц: \ Усерс \ сумит \ Десктоп \ Дестинатион "МиФСО.ЦопиФиле Соурце: = СоурцеФиле, Дестинатион: = ДестинатионФолдер &" \ СамплеФилеЦопи.клск "Енд Суб

У горњем коду сам користио две променљиве - СоурцеФиле и ДестинатионФолдер.

Изворна датотека садржи адресу датотеке коју желим копирати, а варијабла ДестинатионФолдер садржи адресу у мапу у коју желим копирати датотеку.

Имајте на уму да није довољно дати назив одредишне фасцикле када копирате датотеку. Такође морате навести назив датотеке. Можете користити исти назив датотеке или га можете променити. У горњем примеру сам копирао датотеку и дао јој име СамплеФилеЦопи.клск

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

Код испод копираће све датотеке из изворне фасцикле у одредишну фасциклу.

Суб ЦопиАллФилес () Дим МиФСО као ФилеСистемОбјецт Дим МиФиле као Филе Дим СоурцеФолдер Ас Стринг Дим ДестинатионФолдер Ас Стринг Дим МиФолдер Ас Фолдер Дим МиСубФолдер Ас Фолдер СоурцеФолдер = "Ц: \ Усерс \ сумит \ Десктоп \ Соурце" ДестинатионФолдер = "Ц: \ Усерс \ сумит \ Десктоп \ Дестинатион "Сет МиФСО = Нев Сцриптинг.ФилеСистемОбјецт Сет МиФолдер = МиФСО.ГетФолдер (СоурцеФолдер) За сваки МиФиле у МиФолдер.Филес МиФСО.ЦопиФиле Извор: = МиФСО.ГетФиле (МиФиле), _ Одредиште = = Одредиште "& МиФиле.Наме, Овервритефилес: = Фалсе Нект МиФиле Енд Суб

Горњи код ће копирати све датотеке из изворне фасцикле у одредишну фасциклу.

Имајте на уму да сам у методи МиФСО.ЦопиФиле навео својство ‘Овервритефилес’ као Фалсе (ово је подразумевано Труе). Ово осигурава да се датотека, ако већ имате у фасцикли, не копира (и видећете грешку). Ако уклоните „Овервритефилес“ или поставите ово на Труе, у случају да у одредишној фасцикли постоје датотеке са истим именом, оне ће бити пребрисане.

Про врх: Приликом копирања датотека увек постоји могућност преписивања датотека. У овом случају, добра идеја је да додате временску ознаку заједно са именом. Ово ће осигурати да се имена увек разликују и лако можете пратити које су датотеке у које време копиране.

Ако желите да копирате датотеке само одређене екстензије, то можете учинити помоћу наредбе ИФ Тхен да бисте проверили да ли је екстензија клск или не.

Суб ЦопиЕкцелФилесОнли () Дим МиФСО Као ФилеСистемОбјецт Дим МиФиле као Филе Дим СоурцеФолдер Ас Стринг Дим ДестинатионФолдер Ас Стринг Дим МиФолдер Као фасцикла Дим МиСубФолдер Ас Фолдер СоурцеФолдер = "Ц: \ Усерс \ сумит \ Десктоп \ Соурце \ ДестинатионФолдер =" Ц: сумит \ Десктоп \ Дестинатион "Сет МиФСО = Нев Сцриптинг.ФилеСистемОбјецт Сет МиФолдер = МиФСО.ГетФолдер (СоурцеФолдер) За сваку моју датотеку у МиФолдер.Филес Ако је МиФСО.ГетЕктенсионНаме (МиФиле) =" клск "Затим МиФСО.ЦопиФиле Извор: (МиФиле), _ Дестинатион: = ДестинатионФолдер & "\" & МиФиле.Наме, Овервритефилес: = Фалсе Енд Иф Нект МиФиле Енд Суб

Методе ФилеСистемОбјецт (ФСО)

Ево метода које можете користити за сваки објекат. Ово је само за референцу и не брине се превише око тога. Употреба неких од њих приказана је у горе наведеним примерима.

ФСО методе За Објекат Опис
ДривеЕкистс Погон Проверава да ли постоји диск јединица или не
ГетДриве Погон Враћа инстанцу погонског објекта на основу наведене путање
ГетДривеНаме Погон Понавља назив диска
БуилдПатх Датотека/фасцикла Генеришите путању из постојеће путање и имена
Копија датотека Датотека/фасцикла Копира датотеку
ГетАбсолутеПатхНаме Датотека/фасцикла Врати канонски приказ путање
ГетБасеНаме Датотека/фасцикла Врати основно име са путање. На пример, „Д: \ ТестФолдер \ ТестФиле.клсм“ ће вратити ТектФиле.клсм
ГетТемпНаме Датотека/фасцикла Генеришите име које се може користити за именовање привремене датотеке
ЦопиФолдер Фолдер Копира фасциклу са једне локације на другу
Направити фолдер Фолдер Креира нову фасциклу
ДелетеФолдер Фолдер Брише наведену фасциклу
ФолдерЕкистс Фолдер Проверава да ли фасцикла постоји или не
ГетФолдер Фолдер Враћа инстанцу објекта фасцикле на основу наведене путање
ГетПарентФолдерНаме Фолдер Поново покреће име надређене фасцикле на основу наведене путање
ГетСпециалФолдер Фолдер Сазнајте локацију различитих системских фасцикли.
МовеФолдер Фолдер Премешта фасциклу са једне локације на другу
ДелетеФиле Датотека Брише датотеку
ФилеЕкистс Датотека Проверава да ли датотека постоји или не
ГетЕктенсионНаме Датотека Враћа екстензију датотеке
ГетФиле Датотека Враћа инстанцу објекта датотеке на основу наведене путање
ГетФилеНаме Датотека Враћа назив датотеке
ГетФилеВерсион Датотека Враћа верзију датотеке
МовеФиле Датотека Премешта датотеку
ЦреатеТектФиле Датотека Креира текстуалну датотеку
ГетСтандардСтреам Датотека Дохватите стандардни улаз, излаз или ток грешака
ОпенТектФиле Датотека Отворите датотеку као ТектСтреам

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave