Argumentul funcției Excel VBA ByRef
ByRef în VBA este o funcție numită ca referință în care oferim o referință la orice argumente din codul nostru, atunci când realizăm funcții personalizate și dorim să folosim valoarea oricărei variabile care este definită mai devreme înainte de funcția pe care o folosim funcția ByRef, sintaxa de utilizat este simplă ca funcție funcție-nume (variabilă ByRef ca tip de date).
Folosind Byref, putem indica valoarea variabilă originală fără a modifica valoarea variabilei. Aceasta este ca și cum ați trece valoarea variabilă direct subprocedurii VBA sau funcției VBA.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function.png.webp)
Cum să treceți argumentul utilizând argumentul VBA ByRef?
Exemplul nr. 1
De exemplu, uitați-vă la codul VBA de mai jos.
Codul 1:
Sub Procedură1 () Dim k Întreg k = 50 Procedură2 k MsgBox k End Sub
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_2.png.webp)
Cod2:
Sub Procedură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)
În prima procedură, am declarat variabila „k” ca Număr întreg.
Apoi am atribuit valoarea acestei variabile ca 50.
După aceea, am adăugat o nouă linie, adică
Procedura2 k
Acesta este al doilea nume de procedură. În această procedură, am declarat variabila din paranteză ca Șir în VBA, dar am folosit cuvântul „ByRef”.
ByRef k Ca întreg
Aici am atribuit valoarea variabilei „k” ca.
k = k + 10
Ok, acum voi rula codul pas cu pas apăsând tasta 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)
Apăsați tasta F8 de încă două ori și plasați un cursor pe variabila „k” pentru a vedea valoarea variabilei „k”.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_6.png.webp)
Deoarece am atribuit valoarea 50, aceasta arată valoarea 50. Acum a evidențiat linia Procedură2 k, care este al doilea nume de procedură.
Dacă apăs tasta F8 acum, aceasta va sări din procedura curentă și va trece la a doua procedură.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_7.png.webp)
Acum, deoarece am folosit cuvântul ByRef, acesta a purtat variabila „k” din procedura de mai sus.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_8.png.webp)
Apăsați de două ori tasta F8. Se va întoarce la subprocedura anterioară. Dacă observați în a doua procedură, am aplicat formula ca k = k + 10. adică, valoarea „k” este 50, apoi adaugă încă 10 la acea adică, 60 în total.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_9.png.webp)
Acum, codul rulează în prima procedură, iar în această procedură, valoarea variabilă „k” este 50. Dar apăsați tasta F8 și vedeți rezultatul într-o casetă de mesaj.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_10.png.webp)
Am obținut rezultatul ca 60 în loc de valoarea implicită de 50 în această procedură.
Motivul pentru care am obținut 60 deoarece, în cea de-a doua procedură, am aplicat „ByRef“, astfel încât a dus rezultatul ecuației (k = k + 10) la procedura curentă.
Aici prima valoare a variabilei „k” este 50, iar în cea de-a doua procedură valoarea „k” a variabilei este k + 10 adică 60, care este transportată la prima procedură.
În prima procedură, valoarea inițială a variabilei „k” a fost 50, deci By Ref a schimbat valoarea inițială de la 50 la 60 executând ecuația k = k + 10 adică, k = 50 +10 = 60.
Exemplul nr. 2
Acum aruncați o privire la încă un exemplu.
Codul 1:
Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber este modificat prin procedura Change_ByRef MsgBox "Numărul meu este acum:" & MyNumber End Sub
Codul 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)
Acest lucru funcționează exact la fel ca și codul anterior.
Inițial, valoarea variabilei „Numărul meu” este 1. Apoi numim procedura de mai jos prin numele ei
Apelați Change_ByRef (MyNumber)
În această procedură, valoarea variabilei este 14.
Deci, când revine la procedura anterioară, va atribui noua valoare variabilei ca 14.
![](https://cdn.know-base.net/5495429/vba_byref_pass_argument_using_excel_vba_byref_function_13.png.webp)