ВБА функција - позив, повратна вредност и параметри

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

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

Креирање функције без аргумената

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

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

123 Функција ГетВалуе () као цео бројГетВалуе = 50Завршна функција

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

Такође можете да креирате функције које се односе на објекте у ВБА, али морате да употребите Сет Кеиворд да бисте вратили вредност из функције.

123 Функција ГетРанге () као РангеПодеси ГетРанге = Опсег ("А1: Г4")Завршна функција

Ако бисте користили горњу функцију у свом ВБА коду, функција би увек вратила опсег ћелија А1 до Г4 у било ком листу на коме радите.

Позивање функције из потпроцедуре

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

Вредност 50 би се увек вратила.

Такође можете позвати функцију ГетРанге из подпроцедуре.

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

Креирање функција

Појединачни аргумент

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

123 Функција ЦонвертКилосТоПоундс (дблКило као Доубле) као ДоублеЦонвертКилоТоПоундс = дблКило*2.2Завршна функција

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

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

У горњем примеру имамо 2 процедуре - свака од њих користи функцију за израчунавање фунти вредности килограма који су им пренети у дблКило Аргумент функције.

Више аргумената

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

123 Функција ЦалцулатеДаиДифф (Дате1 као датум, Дате2 као датум) као ДоублеЦалцулатеДаиДифф = Датум2-Датум1Завршна функција

Затим можемо позвати функцију за израчунавање броја дана између 2 датума.

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

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

123456 Функција ЦалцулатеДаиДифф (Дате1 као Дате, Оптионал Дате2 ас Дате) као Доубле'проверите други датум и ако не постоји, учините Дате2 једнаким данашњем датуму.Ако је Датум2 = 0, онда је Датум2 = Датум'израчунај разликуЦалцулатеДаиДифф = Датум2-Датум1Завршна функција

Подразумевана вредност аргумента

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

1234 Функција ЦалцулатеДаиДифф (Дате1 као Дате, Оптионал Дате2 ас Дате = "06/02/2020") као Доубле'израчунај разликуЦалцулатеДаиДифф = Датум2-Датум1Завршна функција

БиВал и БиРеф

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

БиВал значи да преносите копију променљиве у функцију, док БиРеф значи да се позивате на оригиналну вредност променљиве. Када проследите копију променљиве (БиВал), оригинална вредност променљиве је НЕ промењена, али када се позивате на променљиву, изворну вредност променљиве мења функција.

1234 Функција ГетВалуе (БиРеф интА као цео број) као цео бројинтА = интА * 4ГетВалуе = интАЗавршна функција

У горњој функцији, БиРеф се може изоставити и функција би радила на исти начин.

1234 Функција ГетВалуе (интА као цео број) као цео бројинтА = интА * 4ГетВалуе = интАЗавршна функција

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

123456789 Под ТестВалуес ()Дим интВал као цео број'попуните променљиву вредност 10интВал = 10'покрените функцију ГетВалуе и покажите вредност у непосредном прозоруДебуг.Принт ГетВалуе (интВал)'прикажи вредност променљиве интВал у непосредном прозоруДебуг.Принт интВалЕнд Суб

Имајте на уму да прозори за отклањање грешака приказују вредност 40 оба пута. Када промените променљиву ИнтВал у функцију - вредност 10 се преноси у функцију и помножи са 4. Коришћењем кључне речи БиРеф (или потпуно изостављањем), ИЗМЕНИЋЕ се вредност променљиве ИнтВал. Ово се приказује када прво прикажете резултат функције у непосредном прозору (40), а затим вредност променљиве ИнтВал у прозору за отклањање грешака (такође 40).

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

1234 Функција ГетВалуе (БиВал интА као цео број) као цео бројинтА = интА * 4ГетВалуе = интАЗавршна функција

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

Излазна функција

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

12345678910111213 Функција ФиндНумбер (стрСеарцх Ас Стринг) Као цео бројДим и Ас Интегер'прођите кроз свако слово у низуФор и = 1 То Лен (стрСеарцх)'ако је слово нумеричко, вратите вредност функцијиАко је ИсНумериц (Мид (стрСеарцх, и, 1)) ТадаФиндНумбер = Мид (стрСеарцх, и, 1)', а затим изађите из функцијеИзлазна функцијаКрај АкоСледећиФиндНумбер = 0Завршна функција

Горња функција ће пролазити кроз низ који је обезбеђен док не пронађе број, а затим ће вратити тај број из низа. Наћи ће само први број у низу као и тада Излаз функција.

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

1234567 Суб ЦхецкФорНумбер ()Дим НумИс као Интегер'проследите текстуални низ функцији финд нумберНумИс = ФиндНумбер ("Горњи спрат, 8 Оак Лане, Тексас")'приказати резултат у непосредном прозоруДебуг.Принт НумИсЕнд Суб

Коришћење функције из Екцел листа

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

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

Изаберите Кориснички дефинисано са листе категорија

Одаберите жељену функцију од доступних Кориснички дефинисане функције (УДФ -ови).

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

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

123 Приватна функција ЦалцулатеДаиДифф (Дате1 као датум, Дате2 као датум) као ДоублеЦалцулатеДаиДифф = Датум2-Датум1Завршна функција

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

Занимљиво је, међутим, да и даље можете користити функцију - једноставно се неће појавити на листи када је тражите!

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

Такође можете користити функцију коју сте креирали без аргумената у Екцел листу.

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

wave wave wave wave wave