„Функција“ и „Под“ процедури во VBA

содржина

Вградени VBA функции

Пред да започнете со креирање на сопствени VBA функции, добро е да знаете дека Excel VBA има богата колекција на претходно вградени функции што можете да ги користите додека го пишувате вашиот код.

Списокот на овие функции може да се види во уредникот VBA:

  • Отворете работна книга на Excel и стартувајте го уредникот VBA (кликнете за да го направите ова Alt + F11), и потоа притиснете F2.
  • Изберете библиотека од паѓачката листа во горниот лев агол на екранот VBA.
  • Ќе се појави список на вградени VBA класи и функции. Кликнете на името на функцијата за да се прикаже нејзиниот краток опис на дното од прозорецот. притискање F1 ќе ја отвори страницата за онлајн помош за таа функција.

Дополнително, комплетната листа на вградени VBA функции со примери може да се најде во Центарот за развивачи на Visual Basic.

Прилагодени процедури „Функција“ и „Под“ во VBA

Во Excel Visual Basic, збир на команди кои вршат одредена задача се ставаат во процедура. функција (Функција) или под (Потпрограма). Главната разлика помеѓу процедурите функција и под е таа процедура функција враќа резултат, процедура под - не.

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

Аргументи

Различни податоци може да се пренесат до процедурите на VBA со помош на аргументи. Списокот на аргументи се одредува при декларирање на процедура. На пример, постапката под во VBA го додава дадениот цел број (Цел број) на секоја ќелија во избраниот опсег. Можете да го пренесете овој број во процедурата користејќи аргумент, вака:

Под AddToCells(i како цел број) ... Крај на под

Имајте на ум дека има аргументи за процедури функција и под во VBA е опционален. Некои процедури не бараат аргументи.

Факултативни аргументи

VBA процедурите може да имаат опционални аргументи. Тоа се аргументи кои корисникот може да ги наведе доколку сака, а доколку се испуштени, постапката ги користи стандардните вредности за нив.

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

Под AddToCells (опционално i како цел број = 0)

Во овој случај, цел број аргумент i стандардното ќе биде 0.

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

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

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

  • ByVal – пренесување аргумент по вредност. Ова значи дека само вредноста (т.е. копија од аргументот) се предава на процедурата, и затоа сите промени направени во аргументот внатре во процедурата ќе бидат изгубени кога постапката ќе излезе.
  • ByRef – пренесување аргумент со референца. Односно, вистинската адреса на локацијата на аргументот во меморијата се пренесува на процедурата. Сите промени направени во аргументот во процедурата ќе бидат зачувани кога постапката ќе излезе.

Користење на клучни зборови ByVal or ByRef во декларацијата за постапката, можете да наведете како аргументот се пренесува во постапката. Ова е прикажано во примерите подолу:

Под AddToCells (ByVal i како цел број) ... Крај на под
Во овој случај, цел број аргумент i помина по вредност. По напуштањето на постапката под сите направени со i промените ќе бидат изгубени.
Под AddToCells (ByRef i како цел број) ... Крај на под
Во овој случај, цел број аргумент i донесен со референца. По напуштањето на постапката под сите направени со i промените ќе се зачуваат во променливата што е пренесена во процедурата под.

Запомнете дека аргументите во VBA стандардно се пренесуваат по референца. Со други зборови, ако не се користат клучни зборови ByVal or ByRef, тогаш аргументот ќе биде пренесен со референца.

Пред да продолжите со процедурите функција и под подетално, ќе биде корисно уште еднаш да се разгледаат карактеристиките и разликите помеѓу овие два вида процедури. Следниве се кратки дискусии за VBA процедурите функција и под и се прикажани едноставни примери.

VBA процедура „Функција“

Уредникот VBA ја препознава постапката функцијакога ќе наиде на група команди затворени помеѓу следните изјави за отворање и затворање:

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

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

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

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

Функција VBA Пример: Изведување математичка операција на 3 броеви

Следното е пример за код за процедура VBA функција, кој зема три аргументи од типот Двоен (броеви со подвижна запирка со двојна прецизност). Како резултат на тоа, постапката враќа друг број на типови Двоенеднаков на збирот на првите два аргументи минус третиот аргумент:

Функција SumMinus(dNum1 како двојно, dNum2 како двојно, dNum3 како двојно) како двојно збирМинус = dNum1 + dNum2 - dNum3 Крајна функција

Оваа многу едноставна VBA процедура функција илустрира како податоците се пренесуваат во процедура преку аргументи. Можете да видите дека типот на податоци вратен со постапката е дефиниран како Двоен (зборовите кажуваат Како Двојно по списокот на аргументи). Овој пример, исто така, покажува како резултатот од постапката функција зачувана во променлива со исто име како и името на постапката.

Повикувајќи ја VBA процедурата „Функција“

Ако горенаведената едноставна процедура функција вметнат во модул во уредувачот на Visual Basic, може да се повика од други VBA процедури или да се користи на работен лист во работна книга на Excel.

Повикајте ја VBA процедурата „Функција“ од друга постапка

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

Sub main() Затемнето вкупно како двојно вкупно = SumMinus(5, 4, 3) Крај Под

Повикајте ја VBA процедурата „Функција“ од работен лист

VBA процедура функција може да се повика од работниот лист на Excel на ист начин како и секоја друга вградена функција на Excel. Затоа, постапката создадена во претходниот пример функција - Сумминус може да се повика со внесување на следниов израз во ќелијата на работниот лист:

=SumMinus(10, 5, 2)

VBA процедура „Под“

Уредникот на VBA разбира дека има процедура пред него подкога ќе наиде на група команди затворени помеѓу следните изјави за отворање и затворање:

Под ... Крај Под

VBA процедура „Sub“: Пример 1. Порамнувањето во центарот и големината на фонтот се менуваат во избраниот опсег на ќелии

Размислете за пример на едноставна VBA процедура под, чија задача е да го промени форматирањето на избраниот опсег на ќелии. Ќелиите се центрирани (вертикално и хоризонтално) и големината на фонтот се менува во одредената од корисникот:

Под Format_Centered_And_Sized(Изборна iFontSize како цел број = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize Краен под

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

Овој пример користи и аргумент Опционален Големина на фонтот. Доколку аргументот Големина на фонтот не помина во процедура под, тогаш неговата стандардна вредност е 10. Меѓутоа, ако аргументот Големина на фонтот помина во процедура под, тогаш избраниот опсег на ќелии ќе биде поставен на големината на фонтот одредена од корисникот.

VBA Под-процедура: Пример 2: Порамнување во центарот и задебелен фонт во избраниот опсег на ќелии

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

Под Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Повикување „Sub“ процедура во Excel VBA

Повикајте ја VBA процедурата „Sub“ од друга постапка

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

Под main() Формат на повик_центриран_и_големина(20) Крај под

Доколку постапката Формат_центрирано_и_големина има повеќе од еден аргумент, тие мора да се одделат со запирки. Како ова:

Под main() Формат на повик_центриран_и_големина(arg1, arg2, ...) Крај на под

Повикајте ја VBA процедурата „Sub“ од работниот лист

постапка под не може да се внесе директно во ќелија на лист на Excel, како што може да се направи со процедура функцијабидејќи постапката под не враќа вредност. Меѓутоа, процедурите под, кои немаат аргументи и се декларираат како Јавниот (како што е прикажано подолу) ќе бидат достапни за корисниците на работниот лист. Така, ако едноставните процедури дискутирани погоре под вметната во модул во Visual Basic Editor, постапката Format_centred_and_bold ќе биде достапен за употреба во работен лист на Excel, и постапката Формат_центрирано_и_големина – нема да биде достапно бидејќи има аргументи.

Еве еден лесен начин за извршување (или извршување) на процедура под, достапно од работниот лист:

  • прес Alt + F8 (притиснете го копчето Alt и додека го држите, притиснете го копчето F8).
  • Во списокот со макроа што се појавува, изберете го оној што сакате да го извршите.
  • прес Испратена (трчај)

Да се ​​изврши процедура под брзо и лесно, можете да му доделите кратенка на тастатурата. За ова:

  • прес Alt + F8.
  • Во списокот со макроа што се појавува, изберете го оној на кој сакате да му доделите кратенка на тастатурата.
  • прес параметри (Опции) и во полето за дијалог што се појавува, внесете ја кратенката на тастатурата.
  • прес OK и затворете го дијалогот Макро (Макро).

Внимание: Кога доделувате кратенка на тастатура на макро, проверете дали таа не се користи стандардно во Excel (на пример, Ctrl + C). Ако изберете веќе постоечка кратенка на тастатурата, таа ќе биде преназначена на макрото и како резултат на тоа, корисникот може случајно да го стартува макрото.

Опсег на VBA процедура

Вториот дел од ова упатство го дискутираше опсегот на променливите и константите и улогата на клучните зборови. Јавниот и Приватен. Овие клучни зборови може да се користат и со VBA процедури:

Јавна под AddToCells(i како цел број) ... Крај на под
Доколку на декларацијата за процедурата претходи клучниот збор Јавниот, тогаш постапката ќе биде достапна за сите модули во тој VBA проект.
Приватен под AddToCells(i како цел број) ... Крај на под
Доколку на декларацијата за процедурата претходи клучниот збор Приватен, тогаш оваа постапка ќе биде достапна само за тековниот модул. Не може да се повика додека е во кој било друг модул или од работна книга на Excel.

Запомнете дека ако пред да објавите VBA процедура функција or под клучен збор не е вметнат, стандардното својство е поставено за постапката Јавниот (односно, ќе биде достапен насекаде во овој VBA проект). Ова е за разлика од декларации на променливи, кои по дифолт се Приватен.

Предвремено излегување од VBA процедурите „Функција“ и „Под“

Ако треба да го прекинете извршувањето на VBA процедура функција or под, без да се чека неговиот природен крај, тогаш за ова има оператори Функција за излез и Излез под. Употребата на овие оператори е прикажана подолу користејќи едноставна процедура како пример. функцијаА што очекува да добие позитивен аргумент за извршување на понатамошни операции. Ако на процедурата се пренесе непозитивна вредност, тогаш не може да се извршат дополнителни операции, па на корисникот треба да му се покаже порака за грешка и постапката треба веднаш да излезе:

Функција VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Ако sVAT_Rate <= 0 Потоа MsgBox „Очекуваше позитивна вредност на sVAT_Rate, но беше примено“ и sVAT_Rate Излезна функција Крај ако ... Крајна функција

Ве молиме имајте предвид дека пред да ја завршите постапката функција - ДДВ_Износ, вградена VBA функција е вметната во кодот MsgBox, кој прикажува скокачки прозорец за предупредување до корисникот.

Оставете Одговор