“Фунцтион” и “Суб” процедуре у ВБА

Уграђене ВБА функције

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

Списак ових функција може се видети у ВБА едитору:

  • Отворите Екцел радну свеску и покрените ВБА едитор (кликните да бисте то урадили Алт + ФКСНУМКС), а затим притисните F2.
  • Изаберите библиотеку са падајуће листе у горњем левом углу екрана ВБА.
  • Појавиће се листа уграђених ВБА класа и функција. Кликните на назив функције да бисте приказали њен кратак опис на дну прозора. притискајући F1 отвориће страницу помоћи на мрежи за ту функцију.

Поред тога, комплетна листа уграђених ВБА функција са примерима може се наћи у Висуал Басиц Девелопер Центер-у.

Прилагођене процедуре „Функција” и „Суб” у ВБА

У програму Екцел Висуал Басиц, скуп команди које извршавају одређени задатак се ставља у процедуру. функција (функција) или Под (Подрутина). Главна разлика између процедура функција и Под да ли је то поступак функција враћа резултат, поступак Под - не.

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

Аргументи

Различити подаци се могу пренети ВБА процедурама помоћу аргумената. Листа аргумената је наведена када се декларише процедура. На пример, процедура Под у ВБА додаје дати цео број (Интегер) свакој ћелији у изабраном опсегу. Можете проследити овај број процедури користећи аргумент, као што је овај:

Суб АддТоЦеллс(и Ас Интегер) ... Енд Суб

Имајте на уму да имате аргументе за процедуре функција и Под у ВБА је опционо. Неке процедуре не захтевају аргументе.

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

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

Враћајући се на претходни пример, да бисте учинили целобројни аргумент за функцију опционим, он би био декларисан овако:

Под АддТоЦеллс (опционо и као цео број = 0)

У овом случају, целобројни аргумент i подразумевано ће бити 0.

У процедури може бити неколико опционих аргумената, а сви су наведени на крају листе аргумената.

Преношење аргумената по вредности и референци

Аргументи у ВБА могу се пренети процедури на два начина:

  • БиВал – преношење аргумента по вредности. То значи да се само вредност (тј. копија аргумента) прослеђује процедури, и стога ће све промене учињене у аргументу унутар процедуре бити изгубљене када се процедура изађе.
  • БиРеф – преношење аргумента референцом. То јест, стварна адреса локације аргумента у меморији се прослеђује процедури. Све промене унесене у аргумент унутар процедуре биће сачуване када процедура изађе.

Коришћење кључних речи БиВал or БиРеф у декларацији процедуре, можете одредити како се аргумент прослеђује процедури. Ово је приказано у примерима испод:

Суб АддТоЦеллс(БиВал и Ас Интегер) ... Енд Суб
У овом случају, целобројни аргумент i прослеђен по вредности. Након изласка из процедуре Под све направљено са i промене ће бити изгубљене.
Суб АддТоЦеллс(БиРеф и Ас Интегер) ... Енд Суб
У овом случају, целобројни аргумент i прослеђен референцом. Након изласка из процедуре Под све направљено са i промене ће бити ускладиштене у променљивој која је прослеђена процедури Под.

Запамтите да се аргументи у ВБА подразумевано прослеђују као референца. Другим речима, ако се кључне речи не користе БиВал or БиРеф, онда ће аргумент бити прослеђен референцом.

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

ВБА процедура «Функција»

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

Функција ... Крајња функција

Као што је раније поменуто, поступак функција у ВБА (за разлику од Под) враћа вредност. Следећа правила важе за повратне вредности:

  • Тип података повратне вредности мора бити декларисан у заглављу процедуре функција.
  • Променљива која садржи повратну вредност мора имати исти назив као и процедура функција. Ову променљиву није потребно посебно декларисати, јер она увек постоји као саставни део процедуре. функција.

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

Пример ВБА функције: Извођење математичке операције над 3 броја

Следи пример кода ВБА процедуре функција, који узима три аргумента типа Двапут (бројеви са помичним зарезом двоструке прецизности). Као резултат, процедура враћа други број типа Двапутједнак збиру прва два аргумента минус трећи аргумент:

Функција СумМинус(дНум1 као дупло, дНум2 као дупло, дНум3 као дупло) као двострука сумминус = дНум1 + дНум2 - дНум3 Крајња функција

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

Позивање ВБА процедуре „Функција“

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

Позовите ВБА процедуру „Функција“ из друге процедуре

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

Суб маин() Дим тотал ас Доубле тотал = СумМинус(5, 4, 3) Енд Суб

Позовите ВБА процедуру „Функција“ са радног листа

ВБА процедура функција може се позвати са Екцел радног листа на исти начин као и било која друга уграђена Екцел функција. Дакле, поступак креиран у претходном примеру функција - Сумминус може се позвати уношењем следећег израза у ћелију радног листа:

=SumMinus(10, 5, 2)

ВБА процедура «Суб»

Уредник ВБА разуме да је пред њим процедура Подкада наиђе на групу команди затворених између следећих уводних и завршних изјава:

Суб ... Крај Суб

ВБА процедура „Суб”: Пример 1. Поравнање по средини и промена величине фонта у изабраном опсегу ћелија

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

Суб Формат_Центеред_Анд_Сизед(Опционални иФонтСизе Ас Интегер = 10) Селецтион.ХоризонталАлигнмент = клЦентер Селецтион.ВертицалАлигнмент = клЦентер Селецтион.Фонт.Сизе = иФонтСизе Енд Суб

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

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

ВБА подпроцедура: Пример 2: Поравнање по средини и подебљани фонт у изабраном опсегу ћелија

Следећа процедура је слична оној о којој смо управо разговарали, али овај пут, уместо промене величине, примењује подебљани стил фонта на изабрани опсег ћелија. Ово је пример поступка Под, који не узима аргументе:

Суб Формат_Центеред_Анд_Болд() Селецтион.ХоризонталАлигнмент = клЦентер Селецтион.ВертицалАлигнмент = клЦентер Селецтион.Фонт.Болд = Труе Енд Суб

Позивање „Суб“ процедуре у Екцел ВБА

Позовите ВБА процедуру „Суб“ из друге процедуре

Да позовете ВБА процедуру Под из друге ВБА процедуре, потребно је да напишете кључну реч Позив, назив процедуре Под а даље у загради су аргументи поступка. Ово је приказано у примеру испод:

Суб маин() Цалл Формат_Центеред_Анд_Сизед(20) Енд Суб

Ако поступак Формат_Центеред_Анд_Сизед има више од једног аргумената, морају бити одвојени зарезима. Овако:

Суб маин() Цалл Формат_Центеред_Анд_Сизед(арг1, арг2, ...) Енд Суб

Позовите ВБА процедуру „Суб“ са радног листа

Поступак Под не може се унети директно у ћелију Екцел листа, као што се може урадити процедуром функцијајер поступак Под не враћа вредност. Међутим, процедуре Под, који немају аргументе и декларисани су као Јавност (као што је приказано испод) биће доступно корисницима радног листа. Дакле, ако једноставне процедуре о којима је било речи Под уметнут у модул у Висуал Басиц Едитор-у, процедура Формат_Центеред_Анд_Болд биће доступан за употребу у Екцел радном листу и процедури Формат_Центеред_Анд_Сизед – неће бити доступан јер има аргументе.

Ево једноставног начина да покренете (или извршите) процедуру Под, доступно са радног листа:

  • Press Алт + ФКСНУМКС (притисните тастер други и док га држите притиснутим, притисните тастер F8).
  • На листи макроа која се појави изаберите онај који желите да покренете.
  • Press трчање (трцати)

За обављање процедуре Под брзо и лако, можете му доделити пречицу на тастатури. За ово:

  • Press Алт + ФКСНУМКС.
  • На листи макроа која се појави изаберите онај коме желите да доделите пречицу на тастатури.
  • Press parametri (Опције) и у дијалошком оквиру који се појави унесите пречицу на тастатури.
  • Press OK и затворите дијалог Макро (Макро).

Пажња: Када доделите пречицу на тастатури макроу, уверите се да се не користи као стандард у Екцел-у (нпр. Цтрл + Ц). Ако изаберете већ постојећу пречицу на тастатури, она ће бити поново додељена макроу и као резултат тога, корисник може случајно да покрене макро.

Обим ВБА процедуре

Други део овог туторијала говори о опсегу променљивих и константи и улози кључних речи. Јавност и Приватан. Ове кључне речи се такође могу користити са ВБА процедурама:

Публиц Суб АддТоЦеллс(и Ас Интегер) ... Енд Суб
Ако декларацији процедуре претходи кључна реч Јавност, тада ће процедура бити доступна свим модулима у том ВБА пројекту.
Привате Суб АддТоЦеллс(и Ас Интегер) ... Енд Суб
Ако декларацији процедуре претходи кључна реч Приватан, онда ће ова процедура бити доступна само за тренутни модул. Не може се позвати док је у било ком другом модулу или из Екцел радне свеске.

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

Рани излазак из ВБА процедура „Функција“ и „Под“

Ако треба да прекинете извршавање ВБА процедуре функција or Под, без чекања на његов природни завршетак, онда за ово постоје оператори Излаз функција и Излаз из под. Употреба ових оператора је приказана у наставку користећи једноставну процедуру као пример. функцијаА који очекује да добије позитиван аргумент за обављање даљих операција. Ако је непозитивна вредност прослеђена процедури, тада се не могу извршити даље операције, тако да кориснику треба да се прикаже порука о грешци и процедура треба да изађе одмах:

Функција ВАТ_Амоунт(сВАТ_Рате Ас Сингле) Као појединачна ПДВ_Амоунт = 0 Ако је сВАТ_Рате <= 0 Тада МсгБок "Очекивала позитивну вредност сВАТ_Рате, али је примљена" & сВАТ_Рате Излаз из функције Крај ако ... Крај функције

Имајте на уму да пре завршетка процедуре функција - ПДВ_Износ, уграђена ВБА функција је уметнута у код МсгБок, који кориснику приказује искачући прозор са упозорењем.

Ostavite komentar