Коришћење ФилеСистемОбјецт у Екцел ВБА

Коришћење ФилеСистемОбјецт (ФСО) у Екцел ВБА

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

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

ФСО ради према међународним стандардима и поставкама које имате на рачунару. Ако своју Екцел апликацију дистрибуирате глобално, употреба ФСО -а ће се побринути за све разлике у поставкама између земаља, што би ваш властити код имао проблема.

ФСО ће вам омогућити да радите скоро све у ВБА коду што можете учинити у Виндовс Филе Екплорер -у. Омогућава вам потпуни приступ датотечном систему Виндовс.

Креирање ФилеСистемОбјецт

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

123 Суб ЦреатеФСО ()Постави МиФСО = ЦреатеОбјецт ("Сцриптинг.ФилеСистемОбјецт")Енд Суб

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

Да бисте додали референцу, морате притиснути Алт-Ф11 да бисте ушли у уређивач Висуал Басиц (ВБЕ), а затим користити „Алати | Референце“ из менија ВБЕ. Ово ће приказати искачући прозор за избор одговарајуће референце (погледајте доле).

Померајте се надоле до листе доступних референци док не видите „Мицрософт Сцриптинг Рунтиме“. Означите поље и кликните на У реду, а библиотека је сада део ваше апликације.

Локација датотеке ДЛЛ библиотеке је Ц: \ Виндовс \ СисВОВ64 \ сцррун.длл

Ако своју апликацију дистрибуирате другим колегама или локацијама, важно је да они имају ову датотеку на исправној локацији на свом рачунару, у противном ће доћи до грешке у коду.

Вредно је ставити замку грешке у догађај „ВоркбоокОпен“ помоћу наредбе Дир да бисте проверили да ли датотека постоји. Ако га нема, дајте поруку упозорења и затворите Екцел датотеку.

Када је референца додана, можете користити следећи код за креирање ФСО:

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

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

ФСО има на располагању много метода и својстава. Они су овде подељени у одељке према томе шта могу да ураде.

Коришћење метода „Постоји“

Помоћу методе ФСО можете проверити да ли постоји диск, фасцикла или датотека. Ове методе су једноставне за употребу и захтевају само један параметар.

123456 Суб ЦхецкЕкистанце ()Затамните МиФСО као нови ФилеСистемОбјецтМсгБок МиФСО.ДривеЕкистс ("Ц:")МсгБок МиФСО.ФолдерЕкистс ("Ц: \ темп \")МсгБок МиФСО.ФилеЕкистс ("Ц: \ темп \ тестфиле.ткт")Енд Суб

Све ове изјаве ће вратити „Тачно“ под претпоставком да ваш рачунар има Ц: диск, фасциклу на њој под називом „Темп“ и датотеку у фасцикли Темп под називом „тестфиле.ткт“

Текстуални низови у параметрима не разликују велика и мала слова. Не можете користити заменске знакове ни у једној од ових метода.

Такође не можете користити УРЛ -ове (Униформ Ресоурце Лоцаторс) за описивање локације фасцикле или датотеке. ФСО ради искључиво на Виндовс оперативном систему и систему датотека на њему. За локацију спољног сервера морате прво мапирати диск на ово, а затим користити саму путању диск јединице.

Користећи методе „Гет“

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

ГетАбсолутеПатхнаме

Ово ће обезбедити потпуну путању од корена наведеног погона.

Синтакса је:

ГетАбсолутеПатхНаме (патхспец)

12345 Суб АбсолутеПатх ()Затамните МиФСО као нови ФилеСистемОбјецт, Птх као низПтх = "ц: …"МсгБок МиФСО.ГетАбсолутеПатхНаме (Птх)Енд Суб

Ово ће вратити низ „Ц: \ Усерс \ Рицхард \ Доцументс“. То је зато што је путања наведена као Ц: након чега следе три тачке. Свака тачка означава следећи ниво у структури фасцикли.

ГетБасеНаме

Ово враћа име одређене датотеке или фасцикле.

Синтакса је:

ГетБасеНаме(пут)

12345 Под основно име ()Затамните МиФСО као нови ФилеСистемОбјецт, Птх као низПтх = "Ц: \ темп \ тестфиле.ткт"МсгБок МиФСО.ГетБасеНаме (Птх)Енд Суб

Овај код ће вратити „тестфиле“. Метода враћа последњи одељак у имену путање. Ако је датотека, онда не враћа суфикс датотеке.

Ако се путања не може пронаћи, биће враћен празан низ.

ГетДриве

Ово вам омогућава да користите код за приступ информацијама о диск јединици, на основу наведеног слова погона.

Синтакса је:

ГетДриве (Дривеспец)

123456 Суб ДривеИнфо ()Затамните МиФСО као нови ФилеСистемОбјецт, Птх као низ, Др као дискПтх = "Ц:"Подесите Др = МиФСО.ГетДриве (Птх)МсгБок Др.ФрееСпацеЕнд Суб

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

Уморни сте од тражења примера ВБА кода? Испробајте АутоМацро!

ГетДривеНаме

Ова метода ће одвојити назив диск јединице од низа путање / назива датотеке.

Синтакса је:

ГетДривеНаме (пут)

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

Ово ће вратити „Ц:“

ГетЕктенсионНаме

Ово ће вратити суфикс датотеке на наведеној путањи.

Синтакса је:

ГетЕктенсионНаме (пут)

12345 Име додатног додатка ()Затамните МиФСО као нови ФилеСистемОбјецт, Птх као низПтх = "Ц: \ темп \ тестфиле.ткт"МсгБок МиФСО.ГетЕктенсионНаме (Птх)Енд Суб

Ово ће вратити „ткт“.

Ако није наведена датотека, биће враћен празан низ.

ГетФиле

Ова метода враћа објект датотеке који садржи различите информације о самој датотеци.

Синтакса је:

ГетФиле (филеспец)

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

Ово ће вратити датум и време када је наведена датотека креирана. Ако није наведена датотека или датотека не постоји, добићете грешку „датотека није пронађена“.

12345 Име под -датотеке ()Затамните МиФСО као нови ФилеСистемОбјецт, Птх као низПтх = "Ц: \ темп \ тестфиле.ткт"МсгБок МиФСО.ГетФилеНаме (Птх)Енд Суб

Ово ће вратити „тестфиле.ткт“.

ГетФолдер

Ово ствара објекат фасцикле за основну фасциклу на наведеној путањи. Путања мора да садржи само називе фасцикли. Имена датотека не смеју бити унета јер ће у супротном доћи до грешке.

Синтакса је:

ГетФолдер (фолдерспец)

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

Објекат фасцикле садржи различите информације којима се може приступити. У овом случају враћа датум када је фасцикла створена.

Ову методу можете користити и за преузимање свих назива датотека у датој фасцикли:

12345678 Подназиви датотека ()Затамни МиФСО као нови ФилеСистемОбјецт, Птх као низ, Фо као фасциклу, Фн као датотекуПтх = "Ц: \ темп"Постави Фо = МиФСО.ГетФолдер (Птх)За сваки Фн у Фо.ФилесМсгБок Фн.НамеНект ФнЕнд Суб

Овај код ће се понављати кроз фасциклу „Темп“ и приказати свако пронађено име датотеке.

ГетПарентФолдерНаме

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

Синтакса је:

ГетПарентФолдерНаме (пут)

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

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

ВБА програмирање | Генератор кода ради за вас!

Користећи методе „Креирај“

Са ФСО -ом можете креирати нову фасциклу и путању и креирати текстуалну датотеку.

Направити фолдер

Можете одредити ново име путање фолдера које ћете креирати. Опасност од овога је да ће, ако фасцикла већ постоји, доћи до грешке. Да бисте се уверили да се то неће догодити, можете користити метод „ФолдерЕкистс“.

Синтакса је:

Направити фолдер(име фасцикле)

1234567 Суб ЦреатеНевФолдер ()Затамните МиФСО као нови ФилеСистемОбјецт, Птх као низПтх = "Ц: \ темп \ МиФолдер"Ако је МиФСО.ФолдерЕкистс (Птх) = Нетачно ОндаМиФСО.ЦреатеФолдер (Птх)Крај АкоЕнд Суб

Овај код ће створити нову фасциклу под називом „Моја мапа“ испод постојеће путање „Ц: \ темп“.

ЦреатеТектФиле

Ова метода вам омогућава да креирате једноставну текстуалну датотеку и да пишете директно у њу.

Синтакса је:

ЦреатеТектФиле (назив документа, [ преписати, [ уницоде ]])

1234567 Суб ЦреатеТектФиле ()Затамните МиФСО као нови ФилеСистемОбјецт, Птх као низПтх = "Ц: \ темп \ Мифиле.ткт"Подесите Фн = МиФСО.ЦреатеТектФиле (Птх, Труе)Фн.Врите "Додај мој текст овде" & вбЛф & "Ово је други ред"Фн.ЦлосеЕнд Суб

Овај код ствара текстуалну датотеку под називом „Мифиле.ткт“ у фасцикли „Темп“ на диску „Ц:“, а затим у њу уписује два реда текста.

Имајте на уму да је знак за унос реда повезан у низ који се уписује.

Ако путања на коју пишете не постоји, доћи ће до грешке. Можете користити методу „ФолдерЕкистс“ да бисте ово проверили пре стварања датотеке.

Постоји опциони параметар за преписивање постојеће датотеке ако је потребно - ово може бити Тачно или Нетачно. Подразумевано је Труе.

Користећи методе „Копирај“

Помоћу ових метода можете копирати датотеку или фасциклу на другу локацију.

ВБА програмирање | Генератор кода ради за вас!

Копија датотека

Ова метода ће копирати датотеку са једне локације на другу. Имајте на уму да копија неће успети ако одредишна локација има постављен атрибут само за читање.

Синтакса је:

Копија датотека извор, одредиште, [ преписати ]

1234 Суб ЦопиФиле ()Затамните МиФСО као нови ФилеСистемОбјецтМиФСО.ЦопиФиле "Ц: \ темп \*. Ткт", "Ц: \ темп \ мифолдер \", ТачноЕнд Суб

Овај код ће направити копију свих текстуалних (ткт) датотека на „Ц: \ темп“ у „Ц: \ темп \ мифолдер \“, преписујући датотеку где је то потребно. Подразумевана поставка за Оверврите је Труе.

За називе датотека можете користити заменску звјездицу (*), али не можете користити замјенски знак упитника (?) За представљање појединачних знакова.

ЦопиФолдер

Ову методу можете користити за копирање целе фасцикле са једне локације на другу.

Синтакса је:

ЦопиФолдер извор, одредиште, [ преписати ]

1234 Мапа подкопирања ()Затамните МиФСО као нови ФилеСистемОбјецтМиФСО.ЦопиФолдер "Ц: \ темп \*", "Ц: \ усерс \ рицхард \"Енд Суб

Овај код копира све фасцикле и датотеке испод „Ц: \ темп“ у „Ц: \ усерс \ рицхард“. Нова креирана фасцикла биће „Ц: \ усерс \ рицхард \ мифолдер“ јер је „Ц: \ темп“ у себи имала фасциклу под називом „мифолдер“.

Постоје четири могућа исхода коришћења ове методе:

  • Ако одредиште не постоји, онда се изворни фолдер и садржај копирају.
  • Ако одредиште већ постоји, долази до грешке.
  • Ако је одредиште фасцикла, онда ће се изворна фасцикла и њен садржај копирати. До грешке ће доћи ако је Оверврите постављено на Фалсе и већ постоји копија датотеке на одредишту.
  • Ако је одредиште постављено само за читање, доћи ће до грешке ако је преписивање постављено на Нетачно.

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

Користећи методе „Помери“

Ове методе се могу користити за премештање датотека или фасцикли на друга места. То је исто као исецање са једне локације и лепљење на другу локацију. Имајте на уму да ако је датотека за премештање отворена, онда ће метода Мове пропасти са грешком.

МовеФиле

Ова метода се користи за премештање одређене датотеке на другу локацију. Џокер знакови су дозвољени у компоненти последње стазе извора.

Синтакса је:

МовеФиле извор, одредиште

1234 Суб МовеАФиле ()Затамните МиФСО као нови ФилеСистемОбјецтМиФСО.МовеФиле "Ц: \ темп \*", "Ц: \ темп \ мифолдер"Енд Суб

Овај код премешта све датотеке које се налазе на „Ц: \ темп“ у „Ц: \ темп \ мифолдер“.

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

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

ВБА програмирање | Генератор кода ради за вас!

МовеФолдер

Ова метода премешта одређену фасциклу са једне локације на другу.

Синтакса је:

МовеФолдер (извор, одредиште)

1234 Суб МовеАФолдер ()Затамните МиФСО као нови ФилеСистемОбјецтМиФСО.МовеФолдер "Ц: \ темп \ мифолдер", "Ц: \ темп \ мидестинатион"Енд Суб

Овај код премешта фасциклу „моја мапа“ и садржај у фасциклу „моја одредишта“. „Мифолдер“ се ефикасно брише и креира „мидестинатион“ заједно са садржајем из „мифолдер“.

Ако одредишна фасцикла већ постоји, долази до грешке.

Употребом метода „Избриши“

Ове методе се користе за брисање датотека или фасцикли. Морају се користити пажљиво јер нема метода враћања или поништавања ако нешто пође по злу.

ДелетеФиле

Ово брише појединачне датотеке или групу датотека помоћу замјенских знакова.

Синтакса је:

ДелетеФиле филеспец, [ сила ]

1234 Суб ДелетеФилес ()Затамните МиФСО као нови ФилеСистемОбјецтМиФСО.ДелетеФиле "Ц: \ темп \*"Енд Суб

Овај код ће избрисати све датотеке у фасцикли „Ц: \ темп“

Параметар Форце није обавезан и постављен је на Труе или Фалсе. Ако је постављено на Тачно, датотеке само за читање ће бити избрисане. Подразумевана вредност је Фалсе.

ДелетеФолдер

Ова метода брише наведену фасциклу и њен садржај.

Синтакса је:

ДелетеФолдер фолдерспец, [ сила ]

1234 Суб ДелетеФолдерс ()Затамните МиФСО као нови ФилеСистемОбјецтМиФСО.ДелетеФолдер "Ц: \ темп \ МиДестинатион"Енд Суб

Овај код ће избрисати фасциклу „Моје одредиште“ и све датотеке у тој фасцикли. Фасцикла „темп“ ће остати.

Параметар Форце није обавезан и постављен је на Труе или Фалсе. Ако је постављено на Труе, тада ће се мапе само за читање избрисати. Подразумевана вредност је Фалсе.

Џокер знакови се могу користити у последњој компоненти путање. Ако фасцикла није пронађена, доћи ће до грешке.

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

ВБА програмирање | Генератор кода ради за вас!

Друге методе у ФСО

ОпенАсТектСтреам.

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

Синтакса је:

ОпенАсТектСтреам ([ иомоде, [ формат ]])

Параметар „иомоде“ омогућава само читање (1), читање/писање (2) и додавање (8). Параметар читање/писање преписује датотеку.

Параметар „формат“ је подешен на -2 за подразумеване системске поставке, -1 за отварање датотеке као Уницоде и 0 за отварање датотеке као АСЦИИ (амерички стандардни код за размену информација).

1234567891011 Суб ТектСтреам ()Затамните МиФСО као нови ФилеСистемОбјецтПоставите ф = МиФСО.ГетФиле ("Ц: \ темп \ мифиле.ткт")Постави тс = ф.ОпенАсТектСтреам (2)тс.Врите "Мој нови текст"тс.ЦлосеПостави тс = ф.ОпенАсТектСтреам (1)с = тс.РеадЛинеМсгБок стс.ЦлосеЕнд Суб

Овај код добија постојећу текстуалну датотеку и ствара је као објекат помоћу методе „ГетФиле“. Затим отвара ток текста као читање / писање (2) и записује линију текста. Датотека се затим затвара и поново отвара као прочитана (1) и из ње се чита ред који се затим приказује као оквир за поруку.

Имајте на уму да се линија за читање мора ставити у променљиву пре него што се прикаже у оквиру за поруку.

БуилдПатх

Ова метода ће додати име фасцикле или датотеке на крај постојеће путање до фасцикле. Ово ствара само текстуални низ, а заправо не ствара нову фасциклу.

Синтакса је:

БуилдПатх (пут, име)

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

Ово ће приказати „Ц: \ темп \ АНевФолдер“. Међутим, ако заиста желите да користите ову фасциклу, морате да користите методу „ЦреатеФолдер“.

ОпенТектФиле

Ова метода омогућава отварање датотека и читање или писање према постављеним параметрима. Ради на сличан начин као метода ОпенАсТектСтреам.

Синтакса је:

ОпенТектФиле (назив документа, [ иомоде, [ Креирај, [ формат ]]])

Параметар „иомоде“ омогућава ФорРеадинг, ФорВритинг и ФорАппендинг. Параметар ФорВритинг преписује датотеку.

Параметар „цреате“ је логичка вредност. Тачно значи да ће нова датотека бити креирана ако наведено име датотеке не постоји. Нетачно значи да датотека неће бити креирана ако име датотеке није пронађено. Подразумевана вредност је Фалсе.

Параметар „формат“ може се поставити на ТристатеФалсе, ТристатеМикед, ТристатеТруе и ТристатеУсеДефаулт у зависности од тога да ли је датотека АСЦИИ или Уницоде.

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

Овај код ће прочитати ред из текстуалне датотеке „мифиле.ткт“.

Предност коју метода ОпенТектФиле има у односу на ОпенАсТектСтреамМетход је та што има падајуће листе за параметре, које су значајније од покушаја да се запамте одговарајуће нумеричке вредности за различите опције параметара.

ВБА програмирање | Генератор кода ради за вас!

Својства ФСО

Погони

Ово својство садржи колекцију доступних дискова на вашем рачунару.

1234567 Суб Дрв ()Затамните МиФСО као нови ФилеСистемОбјецт, д Као дискПодесите Др = МиФСО.ДривесЗа сваки д У ДрМсгБок д.ДривеЛеттерСледећи дЕнд Суб

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

Име

Ово враћа име одређене датотеке или фасцикле.

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

Овај код ће дати назив датотеке и информације о њој користећи својство Диска.

Патх

Својство Патх ће одвојити путању од спецификације датотеке.

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

Овај пример функционише на исти начин као и пример Наме, само што сада обезбеђује путању до датотеке.

ВБА програмирање | Генератор кода ради за вас!

Величина

Својство Сизе ће дати величину фасцикле или датотеке.

12345 Суб ФСизе ()Затамните МиФСО као нови ФилеСистемОбјецтПоставите ф = МиФСО.ГетФолдер ("Ц: \ темп \")МсгБок ф.СизеЕнд Суб

Овај горњи код ће вратити величину фасцикле „Ц: \ темп \“.

12345 Суб ФСизе ()Затамните МиФСО као нови ФилеСистемОбјецтПоставите ф = МиФСО.ГетФиле ("Ц: \ темп \ мифиле.ткт")МсгБок ф.СизеЕнд Суб

Овај горњи код ће вратити величину датотеке „мифиле.ткт“.

Тип

Својство типе ће вратити текст за тип датотеке или фасцикле.

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

Овај горњи код ће вратити текст „Мапа датотека“.

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

Овај горњи код ће вратити текст „Текстуални документ“.

Обратите пажњу на употребу „ГетФолдер“ и „ГетФиле“ у сваком примеру.

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

wave wave wave wave wave