ВБА приватне и јавне процедуре (под -функције и функције)

Овај водич ће објаснити разлику између јавних и приватних декларација у ВБА и како специфицирати модуле као приватне.

Јавне наспрам приватних подпроцедура

Поступци (под -функције и функције) могу се прогласити приватним или јавним у ВБА -и. Ако су јавни, то значи да ћете их моћи видети из Екцел прозора за макрое и моћи ће да их позовете са било ког места у оквиру вашег ВБА пројекта. Ако су приватни, не могу се видети у Екцел макро прозору и доступни су само за употребу у модулу у којем су декларисани (користећи уобичајене методе, погледајте дно овог чланка за начине приступа приватним процедурама из других модула) .

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

Белешка: Променљиве и константе такође могу бити јавне или приватне.

Екцел прозор за макрое

Подразумевано, Екцел макрои (већина ВБА процедура) су видљиви корисницима радне свеске у прозору макроа:

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

123 Јавни под ХеллоВорлд ()МсгБок "Хелло Ворлд"Енд Суб

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

Да бисте процедуру прогласили приватном, једноставно додајте „Приватно“ пре поднаредбе процедуре:

123 Привате Суб ХеллоЕверионе ()МсгБок "Здраво свима"Енд Суб

Друга процедура не би била видљива у прозору Макро за кориснике програма Екцел, али се ипак може користити у вашем ВБА коду.

Поступци са аргументима

Подпоступци могу имати аргументе. Аргументи су улази у потпроцедуру:

123 Суб Хелло (стрНаме као стринг)МсгБок "Хелло" & стрНамеЕнд Суб

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

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

Јавне функције у Екцелу могу се користити директно на радном листу као „Кориснички дефинисана функција“ (УДФ). Ово је у основи прилагођена формула која се може позвати директно на радном листу. Могу се пронаћи у категорији „Кориснички дефинисано“ у прозору „Уметни функцију“ или се могу откуцати директно у ћелију.

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

Коришћење процедура између модула у вашем ВБА пројекту

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

Покушај позивања приватне процедуре из другог модула резултираће грешком (Напомена: погледајте доњи део овог чланка за заобилажење).

Белешка: Јавне процедуре и променљиве у модулима класа понашају се мало другачије и изван су обима овог чланка.

Различити модули могу да складиште процедуре са истим именом, под условом да су оба приватна.

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

Приватни модули

Модули су подразумевано јавни.

Да бисте модул учинили приватним, ставите следећу кључну реч на врх модула.

1 Опција Приватни модул

Ако неки модул прогласите приватним, сви поступци у модулу неће бити видљиви корисницима програма Екцел. Поступци функција неће се појавити у прозору Уметање функције, али се и даље могу користити у Екцел листу све док корисник зна назив функције!

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

Приступање приватном поступку из другог модула

Као што је горе поменуто, приватне процедуре су недоступне у другим модулима кода „нормалним“ методама. Међутим, приватним процедурама можете приступити користећи Апплицатион.Рун команда доступна у ВБА.

Размотрите следећа 3 модула.

Модул 2 је а Приватно Модул са а Јавно Подпоступак, док је Модул 3 Јавно модул са а Приватно Подпоступак.

У модулу 1 можемо назвати Хелло Ворлд - Опција Приватни модул на врху нас не спречава да позовемо подпроцедуру - све што служи је да сакрије подпроцедуру у макро прозору.

Такође нам није потребна изјава Цалл - ту је да олакша читање кода.

Код би такође могао изгледати овако:

1234 Суб ЦаллХеллоФромПривате ()'позовите подморницу из приватног модулаЗдраво СветеЕнд Суб

Такође можемо покренути помоћну процедуру ХеллоВорлд користећи ВБА Апплицатион.Рун команда.

У Модулу 3, међутим, процедура ГоодМорнингВорлд је проглашена приватном. Не можете га позвати из другог модула користећи „нормална“ средства, нпр. Позив наредбе.

Морате користити Апплицатион.РунЦомманд да покренете Привате Суб из другог модула.

1234 Суб ЦаллГоодМорнинг ()'покрени приватну подморницу из јавног модулаАпплицатион.Рун ("ГоодМорнингВорлд")Енд Суб

Обратите пажњу на то када користите Апплицатион.РунЦомманд наредбу, морате ставити назив Суб Процедуре унутар обрнутих зареза.

Ако покушамо да употребимо наредбу Цалл за покретање подпроцедуре ГоодМорнингВорлд, дошло би до грешке.

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

wave wave wave wave wave