Врло често администратор система Виндовс мора вршити разне отпремања на основу података о корисницима у домену Ацтиве Дирецтори. Замислите да имамо листу налога (корисничка имена у формату самАццоунтНаме), и на пример, морамо добити информације о томе у којој организацији ови корисници раде и о њиховом канонском имену (ЦН). Раније, да бих добио ове информације, морао сам да напишем малу скрипту у вбс-у, која секвенцијално понавља све записе у Екцелу и враћа тражене податке из Ацтиве Дирецтори-а. Такав механизам је у потпуности функционалан, али није баш згодан, па сам одлучио да користим снагу Висуал Басиц-а из језика апликације и извршим Ацтиве Дирецтори пита директно из Екцела (из макроа), јер таква техника би била прилично универзална и, у принципу, све ове скрипте могу се с јасном савјешћу пренијети на мање паметне рачуновође и економисте!
Направио сам нови макро у радној књизи у Екцелу и створио функцију која се зове ГетАДИнфо, која на улазу добија име поља које се претражује (у мом случају ово је корисничко име похрањено у атрибуту Ацтиве Дирецтори - самАццоунтНаме), вредност овог поља (вредност ћелије са корисничким именом) и име АД чизме чија вредност треба да врати функција.
Како све ово функционира? У мом примеру, ћелија А2 садржи име корисника домене и желим да овај корисник сазна компанију у којој је наведен (поље АД „Компанија“) и његово канонско име (поље АД „ункновнНаме“), у овом случају формуле за ћелије, односно изгледаће овако:
Ћелија Б2 (назив организације):
= ГетАДИнфо ("самАццоунтНаме"; А2; "компанија")
Ћелија Ц2 (ЦН):
= ГетАДИнфо ("самАццоунтНаме"; А2; "ункновнНаме")
ВБА макро код за преузимање података из АД-а је следећи:
Функција ГетАДИнфо (БиВал СеарцхФиелд, БиВал СеарцхСтринг, БиВал РетурнФиелд) 'Наведите име домене ("дц = домен, дц = лоцал") Дим адоЦомманд, стрДомаин, објЦоннецтион стрДомаин = "дц = винитпро, дц = ру" Постави објЦоннецтион = ЦреатеОбјецт ( АДОДБ.Цоннецтион ") објЦоннецтион.Отворите" Провидер = АДсДСООбјецт; " 'Повезивање скупа адоЦомманд = ЦреатеОбјецт ("АДОДБ.Цомманд") адоЦомманд.АцтивеЦоннецтион = објЦоннецтион' Рекурзивна претрага у АД почевши од корена домена адоЦомманд.ЦоммандТект = _ "; (& (објецтЦатегори =" & "Корисник" & ")" & _ "(" & СеарцхФиелд & "=" & СеарцхСтринг & "));" & СеарцхФиелд & "," & РетурнФиелд & "; субтрее" "креирају сет записа РецордСет Дим објРецордСет Постави објРецордСет = адоЦомманд.Екецуте Ако објРецордСет.РецордЦоунт = 0 Затим ГетАДИнфо =" није пронађен "'ништа није пронађено Остало ГетАДИнфо = објРецордС РетурнФиелд) 'ретурн валуе Енд Иф' Затворите везу објЦоннецтион.Цлосе 'Обришите променљиве Подесите објРецордСет = Ништа није постављено објЦомманд = Ништа није постављено објЦоннецтион = Ништа Крај функција
Да би ова функција радила, морате да повежете неколико библиотека у ВБА. У ВБА уређивачу изаберите мени Алатке-> Референце и у прозору који се појави означите следеће библиотеке:
- Висуал басиц за примену
- Мицрософт Екцел 14.0 библиотека објеката
- ОЛЕ Аутоматион
- Мицрософт Оффице 14.0 Библиотека објеката
- Мицрософт АцтивеКс дата објекти 2.8 библиотека (или тако даље)
- Мицрософт Сцриптинг Рунтиме
- Регуларни изрази за Мицрософт ВБСцрипт 5.5
Након што активирате следеће компоненте, сачувајте ВБА макро и Екцел радну књижицу, и као резултат тога, информације из Ацтиве Дирецтори-а ће се појавити у одговарајућим Екцел пољима. Лепота овог скрипта је у томе што је прилично свестран и уз мање модификације помоћи ће динамичком преузимању готово свих информација из Ацтиве Дирецтори-а управо у радној књизи тачно у Екцеловој радној књизи!