Функция VBA - повикване, възвращаема стойност и параметри

Този урок ще ви научи да създавате и използвате функции с и без параметри във VBA

VBA съдържа голямо количество вградени функции, които можете да използвате, но можете също да напишете свои собствени. Когато пишете код във VBA, можете да го напишете в подпроцедура или функционална процедура. Функционалната процедура може да върне стойност към кода ви. Това е изключително полезно, ако искате VBA да изпълни задача, за да върне резултат. VBA функциите също могат да бъдат извикани от Excel, точно както вградените Excel функции на Excel.

Създаване на функция без аргументи

За да създадете функция, трябва да я дефинирате, като й дадете име. След това функцията може да бъде дефинирана като тип данни, показващ типа данни, които искате функцията да върне.

Може да искате да създадете функция, която връща статична стойност при всяко извикване - малко като константа.

123 Функция GetValue () като цяло числоGetValue = 50Крайна функция

Ако трябва да изпълните функцията, тя винаги ще връща стойността на 50.

Можете също да създадете функции, които се отнасят до обекти във VBA, но трябва да използвате Set Keyword, за да върнете стойността от функцията.

123 Функция GetRange () като RangeЗадайте GetRange = Range ("A1: G4")Крайна функция

Ако трябва да използвате горната функция във вашия VBA код, функцията винаги ще връща диапазона от клетки A1 до G4 в който и лист да работите.

Извикване на функция от подпроцедура

След като създадете функция, можете да я извикате от всяко друго място в кода си, като използвате подпроцедура за извикване на функцията.

Стойността на 50 винаги ще бъде върната.

Можете също да извикате функцията GetRange от подпроцедура.

В горния пример функцията GetRange се извиква от подпроцедурата за удебеляване на клетките в обекта range.

Създаване на функции

Единичен аргумент

Можете също така да зададете параметър или параметри на вашата функция. Тези параметри могат да бъдат посочени като аргументи.

123 Функция ConvertKilosToPounds (dblKilo като Double) като DoubleConvertKiloToPounds = dblKilo*2.2Крайна функция

След това можем да извикаме горната функция от подпроцедура, за да определим колко паунда е определено количество килограми.

Функция може да бъде извикана от множество процедури във вашия VBA код, ако е необходимо. Това е много полезно, тъй като ви спира да не се налага да пишете един и същ код отново и отново. Той също така ви позволява да разделите дълги процедури на малки управляеми функции.

В горния пример имаме 2 процедури - всяка от тях използва функцията за изчисляване на стойността на паунда на килограмите, предадени им в dblKilo Аргумент на функцията.

Множество аргументи

Можете да създадете функция с множество аргументи и да предадете стойностите на функцията чрез подпроцедура.

123 Функция CalculateDayDiff (Date1 като дата, Date2 като дата) като DoubleCalculateDayDiff = Date2-Date1Крайна функция

След това можем да извикаме функцията, за да изчислим броя на дните между 2 дати.

Аргументи по избор

Можете също да предадете незадължителни аргументи на функция. С други думи, понякога може да ви е необходим аргументът, а понякога може и да не ви е необходим - в зависимост от кода, с който използвате функцията.

123456 Функция CalculateDayDiff (Date1 като дата, незадължителна Date2 като дата) като Double„проверете за втора дата и ако не е там, направете Date2 равна на днешната дата.Ако Date2 = 0, тогава Date2 = Date'изчислете разликатаCalculateDayDiff = Date2-Date1Крайна функция

Стойност на аргумента по подразбиране

Можете също да зададете стойността по подразбиране на незадължителните аргументи, когато създавате функцията, така че ако потребителят пропусне аргумента, стойността, която сте поставили по подразбиране, ще бъде използвана вместо това.

1234 Функция CalculateDayDiff (Date1 като дата, незадължителна Date2 като дата = "06/02/2020") като двойна'изчислете разликатаCalculateDayDiff = Date2-Date1Крайна функция

ByVal и ByRef

Когато предавате стойности на функция, можете да използвате ByVal или ByRef ключови думи. Ако пропуснете някое от тези, ByRef се използва по подразбиране.

ByVal означава, че изпращате копие на променливата към функцията, докато ByRef означава, че имате предвид първоначалната стойност на променливата. Когато предавате копие на променливата (ByVal), първоначалната стойност на променливата е НЕ се променя, но когато се позовавате на променливата, първоначалната стойност на променливата се променя от функцията.

1234 Функция GetValue (ByRef intA As Integer) Като IntegerintA = intA * 4GetValue = intAКрайна функция

В горната функция ByRef може да бъде пропуснат и функцията ще работи по същия начин.

1234 Функция GetValue (intA като цяло число) като цяло числоintA = intA * 4GetValue = intAКрайна функция

За да извикаме тази функция, можем да изпълним подпроцедура.

123456789 Sub TestValues ​​()Dim intVal като цяло число'попълнете променливата със стойност 10intVal = 10'стартирайте функцията GetValue и покажете стойността в непосредствения прозорецDebug.Print GetValue (intVal)'покажете стойността на променливата intVal в непосредствения прозорецDebug.Print intValEnd Sub

Обърнете внимание, че прозорците за отстраняване на грешки показват стойността 40 и двата пъти. Когато предадете променливата IntVal на функцията - стойността на 10 се предава на функцията и се умножава по 4. Използването на ключовата дума ByRef (или пропускането й изцяло), ще ИЗМЕНИ стойността на променливата IntVal. Това се показва, когато първо показвате резултата от функцията в непосредствения прозорец (40), а след това стойността на променливата IntVal в прозореца за отстраняване на грешки (също 40).

Ако НЕ искаме да променяме стойността на оригиналната променлива, трябва да използваме ByVal във функцията.

1234 Функция GetValue (ByVal intA като цяло число) като цяло числоintA = intA * 4GetValue = intAКрайна функция

Сега, ако извикаме функцията от подпроцедура, стойността на променливата IntVal ще остане на 10.

Излезте от функцията

Ако създадете функция, която тества за определено условие и след като се установи, че условието е вярно, искате да върнете стойността от функцията, може да се наложи да добавите оператор Exit Function във вашата функция, за да излезете от функцията преди сте прегледали целия код в тази функция.

12345678910111213 Функция FindNumber (strSearch As String) Като цяло числоDim i As Integer'цикъл през всяка буква в низFor i = 1 To Len (strSearch)'ако буквата е цифрова, върнете стойността на функциятаАко IsNumeric (Mid (strSearch, i, 1)) ТогаваFindNumber = Mid (strSearch, i, 1)'след това излезте от функциятаИзлезте от функциятаКрай АкоСледващияFindNumber = 0Крайна функция

Горната функция ще премине през предоставения низ, докато намери число, и след това ще върне този номер от низ. Той ще намери само първото число в низа, както и тогава Изход функцията.

Горната функция може да бъде извикана от подпрограма, като тази по -долу.

1234567 Sub CheckForNumber ()Dim NumIs като Integer'предайте текстов низ на функцията за намиране на номерNumIs = FindNumber ("Горен етаж, 8 Oak Lane, Тексас")'покажете резултата в непосредствения прозорецDebug.Print NumIsEnd Sub

Използване на функция от Excel лист

В допълнение към извикването на функция от вашия VBA код с помощта на подпроцедура, можете да извикате функцията и от вашия Excel лист. Създадените от вас функции трябва по подразбиране да се появят във вашия списък с функции в раздела User Defined на списъка с функции.

Кликнете върху fx за показване на диалоговия прозорец Вмъкване на функция.

Изберете Дефиниран от потребителя от списъка с категории

Изберете необходимата функция от наличните Потребителски функции (СДС).

Като алтернатива, когато започнете да записвате функцията си в Excel, тя трябва да се появи в падащия списък с функции.

Ако не искате функцията да е налична в лист на Excel, трябва да поставите частната дума пред думата Функция, когато създавате функцията във вашия VBA код.

123 Частна функция CalculateDayDiff (Date1 като дата, Date2 като дата) като DoubleCalculateDayDiff = Date2-Date1Крайна функция

Сега той няма да се появи в падащия списък, показващ наличните функции на Excel.

Интересното е, че все пак можете да използвате функцията - тя просто няма да се появи в списъка, когато я търсите!

Ако сте декларирали втория аргумент като По избор, можете да го пропуснете в листа на Excel, както и в кода на VBA.

Можете също да използвате функцията, която сте създали без аргументи във вашия лист на Excel.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave