ВБА ДИР функција - једноставно објашњење са примерима

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

Једна од таквих функција је ВБА ДИР функција.

Иако се само по себи може чинити као једноставна функција која ради једну одређену ствар.

Али када га комбинујете са неким другим корисним елементима језика за кодирање ВБА, можете створити моћне ствари (описане у примерима касније у овом водичу).

Шта ради ВБА Дир функција?

Користите функцију ВБА ДИР када желите да добијете назив датотеке или фасцикле, користећи њихову путању.

Да вам дам пример, ако имате Екцел датотеку у фасцикли, можете користити функцију ВБА ДИР да бисте добили име те Екцел датотеке (или било које друге врсте датотеке).

Шта ако желим да добијем имена свих Екцел датотека у фасцикли (или свих датотека - била то Екцел датотека или не)?

То можете и ви!

Када једном употребите ДИР функцију, она враћа име прве датотеке у фасцикли. Сада, ако желите да добијете и називе друге, треће, четврте датотеке, можете поново користити функцију ДИР (касније ће бити обрађено као пример).

Дир враћа прво име датотеке које одговара имену путање. Да бисте добили додатна имена датотека која одговарају имену путање, позовите Дир опет без аргумената. Када се више имена датотека не подударају, Дир враћа низ нулте дужине („”). Описано у примерима 3 и 4 касније у овом водичу.

Синтакса ВБА ДИР функције

Дир [(име путање [, атрибути])]
  • патхнаме: Ово је изборни аргумент. То може бити назив датотеке, име фасцикле или име директоријума. Ако име путање није пронађено, функција ВБА ДИР враћа низ нулте дужине („”)
  • атрибуте: Ово је изборни аргумент. Овај аргумент можете користити за навођење неких атрибута, а функција ДИР ће вратити имена датотека на основу тих атрибута. На пример, ако желите листу свих скривених датотека или датотека само за читање (заједно са датотекама без атрибута), морате то да наведете у овом аргументу.

Атрибути доступни за коришћење у ВБА ДИР функцији (можете користити један или више од ових):

Цонстант Вредност Опис
вбНормал 0 (Подразумевано) Одређује датотеке без атрибута.
вбРеадОнли 1 Наводи датотеке само за читање поред датотека без атрибута.
вбХидден 2 Наводи скривене датотеке поред датотека без атрибута.
ВбСистем 4 Наводи системске датотеке поред датотека без атрибута. Није доступно на Мацинтосх -у.
вбВолуме 8 Одређује ознаку волумена; ако је наведен било који други атрибут, вбВолуме се занемарује. Није доступно на Мацинтосх -у.
вбДирецтори 16 Наводи директоријуме или фасцикле поред датотека без атрибута.
вбАлиас 64 Наведено име датотеке је псеудоним. Доступно само на Мацинтосх -у.

Коришћење џокер знакова са ДИР функцијом

Ако радите са Виндовс -ом, можете користити и џокер знакове у функцији ДИР.

Имајте на уму да их не можете користити када радите са ВБА у Мацинтосх -у.

Коришћење џокера може бити корисно када:

  • Желите да добијете називе датотека одређене врсте датотеке (попут .КСЛСКС или .ППТКС)
  • Када у именима датотека имате одређени суфикс/префикс и желите да добијете имена ових датотека/фасцикли/директоријума. На пример, ако желите имена свих датотека са префиксом2021-2022, то можете учинити помоћу заменских знакова.

У Екцелу постоје три заменска знака:

  1. * (звездица) - Представља било који број знакова. На пример, 2019* дао би вам имена свих датотека са префиксом2021-2022.
  2. ? (Знак питања) - Представља један једини лик. На пример, 2021-2022? дали би вам имена свих датотека које почињу са 2021-2022 и имају још један знак у имену (као што су 2021-2022А, 2021-2022Б, 2021-2022Ц итд.)

Напомена: Постоји још један заменски знак - тилда (~). Пошто се не користи много, прескочио сам његово објашњење. Овде можете прочитати више о томе ако сте заинтересовани.

ВБА ДИР функција - Примери

Хајдемо сада заронити и видети неке примере коришћења функције ВБА ДИР.

Пример 1 - Добијање назива датотеке са путање

Када имате путању до датотеке, можете користити функцију ДИР да бисте из ње добили назив датотеке.

На пример, доњи код враћа назив датотеке и приказује га у оквиру за поруку.

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

Горњи код користи променљиву „ФилеНаме“ за складиштење имена датотеке које враћа функција ДИР. Затим користи оквир за поруку да прикаже назив датотеке (као што је приказано испод).

И шта се дешава када датотека не постоји?

У том случају функција ДИР би вратила празан низ.

Код у наставку користи наредбу Иф Тхен Елсе за проверу да ли датотека постоји или не. Ако датотека не постоји, приказује оквир за поруку са текстом „Датотека не постоји“, иначе приказује назив датотеке.

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

Пример 2 - Проверите да ли директоријум постоји или не (и креирајте ако не постоји)

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

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

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

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

Испод је код који користи МкДир функција да бисте креирали фасциклу у случају да не постоји.

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

Пример 3 - Добијте имена свих датотека и фасцикли у директоријуму

Ако желите да добијете листу свих назива датотека и фасцикли у директоријуму, можете користити ДИР функцију.

Код испод приказује све датотеке и називе фасцикли у фасцикли Тест (која се налази на следећој путањи - Ц: \ Усерс \ сумит \ Десктоп \ Тест \).

Користим Дебуг.Принт да прикажем имена у прозору Одмах. Ово можете користити и за исписивање имена у оквиру за поруку или у колони у програму Екцел.

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

Петља До Док се у горњем коду наставља све док се не покрију све датотеке и фасцикле на датој путањи. Када нема више датотека/фасцикли за покривање, ФилеНаме постаје нулл стринг и петља се зауставља.

Пример 4 - Добијте имена свих датотека у фасцикли

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

Суб ГетАллФилеНамес () Дим ФилеНаме Ас Стринг ФилеНаме = Дир ("Ц: \ Усерс \ сумит \ Десктоп \ Тест \") До Вхиле ФилеНаме "" Дебуг.Принт ФилеНаме ФилеНаме = Дир () Лооп Енд Суб

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

У овом коду нисам навео вбДирецтори у функцији ДИР. Када наведете вбДирецтори, он ће вам дати имена свих датотека, као и фасцикли.

Када не наведете вбДирецтори, функција ДИР ће вам дати само називе датотека.

Белешка: Ако желите да добијете имена свих датотека у главној фасцикли и подмапама, не можете користити функцију ДИР (јер није рекурзивна). Да бисте то урадили, можете користити Повер Куери (није потребно кодирање) или користити објекат система датотека у ВБА (са рекурзијом).

Пример 5 - Добијте имена свих подмапа унутар фасцикле

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

Користи ГетАтр функција у ВБА, што нам омогућава да проверимо да ли је име које враћа функција ДИР име датотеке или фасцикле/директоријума.

Суб ГетСубФолдерНамес () Дим ФилеНаме Ас Стринг Дим ПатхНаме Ас Стринг ПатхНаме = "Ц: \ Усерс \ сумит \ Десктоп \ Тест \" ФилеНаме = Дир (ПатхНаме, вбДирецтори) До Вхиле ФилеНаме "" Иф ГетАттр (ПатхНаме & ФилеНацтори) = вб Дебуг.Принт ФилеНаме Енд Ако је ФилеНаме = Дир () Лооп Енд Суб

Опет, користим Дебуг.Принт да добијем имена у непосредном прозору. Можете их добити у оквиру за поруку или у Екцелу (одговарајућом изменом кода).

Пример 6 - Набавите прву Екцел датотеку из фасцикле

Помоћу функције ДИР можете одредити екстензију датотеке или било који суфикс/префикс који желите у имену датотеке које се враћа.

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

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

Имајте на уму да сам користио * .клс * (знак звездице са обе стране). Ово ће осигурати да се провере све верзије Екцел датотека (.клс, клск, .клсм, .клсб).

Пример 7 - Добијте имена свих Екцел датотека у фасцикли

Користите доњи код да бисте добили имена свих Екцел датотека у фасцикли Тест.

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

Док функција ДИР враћа само назив прве Екцел датотеке, будући да је поново позивамо у петљи, она пролази кроз све датотеке и даје нам имена свих Екцел датотека.

Надам се да вам је овај водич и примери били корисни.

Реците ми шта мислите у одељку за коментаре.

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

wave wave wave wave wave