VBA ByRef - Предайте аргумент с помощта на функцията Excel VBA ByRef

Аргумент за функция на Excel VBA ByRef

ByRef във VBA е функция, наречена като препратка, където предоставяме препратка към всякакви аргументи в нашия код, когато правим персонализирани функции и искаме да използваме стойността на всяка променлива, която е дефинирана по-рано преди функцията, която използваме функцията ByRef, синтаксисът за използване е прост като функция-име на функция (променлива ByRef като тип данни).

Използвайки Byref, можем да посочим първоначалната стойност на променливата, без да променяме стойността на променливата. Това е като да предадете стойността на променливата директно на подпроцедурата VBA или функцията VBA.

Как да предам аргумент, използвайки VBA ByRef аргумент?

Пример # 1

Например погледнете кода по-долу VBA.

Код1:

Подпроцедура1 () Dim k As Integer k = 50 Процедура2 k MsgBox k End Sub

Код2:

Подпроцедура2 (ByRef k As Integer) k = k + 10 End Sub

В първата процедура декларирах променливата „k“ като Integer.

След това присвоих стойността на тази променлива като 50

След това добавих нов ред, т.е.

Процедура 2 k

Това е второто име на процедурата. В тази процедура декларирах променливата в скобите като String във VBA, но използвах думата „ByRef“.

ByRef k Като цяло число

Тук съм задал стойността на променливата „k“ като

k = k + 10

Добре, сега ще стартирам кода стъпка по стъпка, като натисна клавиша F8.

Натиснете клавиша F8 още два пъти и поставете курсор върху променлива „k“, за да видите стойността на променливата „k“.

Тъй като сме присвоили стойността като 50, тя показва стойността като 50. Сега е подчертала реда Procedure2 k, което е второто име на процедурата.

Ако сега натисна клавиша F8, той ще изскочи от текущата процедура и ще премине към втората процедура.

Сега, тъй като използвахме думата ByRef, тя носи стойността на променливата „k“ от горната процедура.

Натиснете клавиша F8 два пъти. Ще се върне към предишната подпроцедура. Ако забележите във втората процедура, аз приложих формулата като k = k + 10. т.е. стойността на „k“ е 50, след което добавя още 10 към тази, т.е. общо 60.

Сега кодът се изпълнява в първата процедура и в тази процедура стойността на променливата „k“ е 50. Но натиснете клавиша F8 и вижте резултата в полето за съобщение.

Получихме резултата като 60 вместо стойността по подразбиране 50 в тази процедура.

Причината, поради която получихме 60, защото във втората процедура сме приложили „ByRef“, така че той е пренесъл резултата от уравнението (k = k + 10) към текущата процедура.

Тук първата стойност на променлива „k“ е 50, а във втората процедура стойността на променливата „k“ е k + 10, т.е. 60, която се пренася към първата процедура.

При първата процедура първоначалната стойност на променливата „k“ беше 50, така че чрез Ref е променила първоначалната стойност от 50 на 60 чрез изпълнение на уравнението k = k + 10, т.е. k = 50 +10 = 60.

Пример # 2

Сега разгледайте още един пример.

Код 1:

Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber се променя от процедурата Change_ByRef MsgBox "My Number is now:" & MyNumber End Sub


Код 2:

Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 End Sub

Това работи точно по същия начин като предишния код.

Първоначално стойността на променливата “MyNumber” е 1. След това извикваме процедурата по-долу с нейното име

Call Call_ByRef (MyNumber)

В тази процедура стойността на променливата е 14.

Така че, когато се върне към предишната процедура, тя ще присвои новата стойност на променливата като 14.

Интересни статии...