Аргумент за функция на Excel VBA ByRef
ByRef във VBA е функция, наречена като препратка, където предоставяме препратка към всякакви аргументи в нашия код, когато правим персонализирани функции и искаме да използваме стойността на всяка променлива, която е дефинирана по-рано преди функцията, която използваме функцията ByRef, синтаксисът за използване е прост като функция-име на функция (променлива ByRef като тип данни).
Използвайки Byref, можем да посочим първоначалната стойност на променливата, без да променяме стойността на променливата. Това е като да предадете стойността на променливата директно на подпроцедурата VBA или функцията VBA.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function.png.webp)
Как да предам аргумент, използвайки VBA ByRef аргумент?
Пример # 1
Например погледнете кода по-долу VBA.
Код1:
Подпроцедура1 () Dim k As Integer k = 50 Процедура2 k MsgBox k End Sub
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_2.png.webp)
Код2:
Подпроцедура2 (ByRef k As Integer) k = k + 10 End Sub
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_3.png.webp)
В първата процедура декларирах променливата „k“ като Integer.
След това присвоих стойността на тази променлива като 50
След това добавих нов ред, т.е.
Процедура 2 k
Това е второто име на процедурата. В тази процедура декларирах променливата в скобите като String във VBA, но използвах думата „ByRef“.
ByRef k Като цяло число
Тук съм задал стойността на променливата „k“ като
k = k + 10
Добре, сега ще стартирам кода стъпка по стъпка, като натисна клавиша F8.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_4.png.webp)
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_5.png.webp)
Натиснете клавиша F8 още два пъти и поставете курсор върху променлива „k“, за да видите стойността на променливата „k“.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_6.png.webp)
Тъй като сме присвоили стойността като 50, тя показва стойността като 50. Сега е подчертала реда Procedure2 k, което е второто име на процедурата.
Ако сега натисна клавиша F8, той ще изскочи от текущата процедура и ще премине към втората процедура.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_7.png.webp)
Сега, тъй като използвахме думата ByRef, тя носи стойността на променливата „k“ от горната процедура.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_8.png.webp)
Натиснете клавиша F8 два пъти. Ще се върне към предишната подпроцедура. Ако забележите във втората процедура, аз приложих формулата като k = k + 10. т.е. стойността на „k“ е 50, след което добавя още 10 към тази, т.е. общо 60.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_9.png.webp)
Сега кодът се изпълнява в първата процедура и в тази процедура стойността на променливата „k“ е 50. Но натиснете клавиша F8 и вижте резултата в полето за съобщение.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_10.png.webp)
Получихме резултата като 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
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_12.png.webp)
Това работи точно по същия начин като предишния код.
Първоначално стойността на променливата “MyNumber” е 1. След това извикваме процедурата по-долу с нейното име
Call Call_ByRef (MyNumber)
В тази процедура стойността на променливата е 14.
Така че, когато се върне към предишната процедура, тя ще присвои новата стойност на променливата като 14.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_13.png.webp)