Care este diferența dintre argumentele ByRef și ByVal? - Întrebare de interviu VBA

Cuprins:

Anonim

Aceasta este una dintre cele mai puse întrebări în interviurile VBA. În acest articol vom afla care este diferența dintre argumentele ByVal și ByRef în Excel VBA.

Definiții:

Argumentul ByRef: Este forma scurtă literală a prin referință. Când un argument este transmis ca argument ByRef către un sub sau funcție diferit, este trimisă referința variabilei reale. Orice modificare adusă copiei variabilei se va reflecta în argumentul original.
Putem spune că, în loc de valoare, locația valorii este trimisă pentru a funcționa folosind ByRef către o funcție.
Acesta este argumentul implicit în VBA. Nu este nevoie să scriem ByRef înainte de argument.
Sintaxă:

Sub x (a ca variantă)

'Sau

Sub x (ByRef a ca variantă)

Argument ByVal: Este o formă scurtă literală de valoare. Când un argument este transmis ca argument ByVal către o altă funcție sau sub, se trimite doar valoarea argumentului. Argumentul original este lăsat intact. Orice modificare făcută în funcția sau sub-străinătatea nu se va reflecta în argumentul original.
Pentru a declara un argument ca ByVal, trebuie să utilizați cuvântul cheie ByVal înainte de argument.
Sintaxă:
Sub x (ByVal a ca variantă)
Acum știm definițiile. Să vedem un exemplu și să trecem cu el.

Exemplu ByRef

Iată un program simplu.

Sub X (ByRef a As Variant) a = 20 Debug.Print "în valoarea sub X a =" & a Sfârșitul Sub Sub Y () a = 10 Apelați X (a) Debug.Print "în valoarea sub Y a a =" & a Sfârșitul Sub 

Deci, aici avem două subrutine. Primul sub este X care ia un argument variantă ca ByRef.
(Puteți omite cuvântul cheie ByRef. Este implicit.)
Apoi, setează valoarea lui a = 20 end apoi imprimă valoarea unui.

Sub Da este subrutina principală care numește subrutină X. Stabilește valoarea a = 10 apoi apelează subrutina X și treceA ca argument. Apoi imprimă valoarea de A în Y.

Acum, când rulați Sub Y, acesta este rezultatul obținut.
în valoarea sub X a = 20

în valoarea sub Y a a = 20

Concluzie: valoarea originalului a este modificată de sub X și setată la 20 pentru ambele subs.
puteți vedea că atunci când rulează Sub Y, valoarea inițială a a a fost 10. Y apelează X (a). X setează valoarea lui a = 20. Tipărește „în valoarea sub X a = 20”. Controlul revine la y și imprimă sub valoarea Y a = 20.
Acesta este efectul argumentului ByRef.

Exemplu ByVal:

Acesta este un exemplu ByVal

Sub X (ByVal a As Variant) a = 20 Debug.Print "în valoarea sub X a =" & a Sfârșitul Sub Sub Y () a = 10 Apelați X (a) Debug.Print "în valoarea sub Y a a =" & a Sfârșitul Sub

Ambele exemple sunt aceleași cu singura diferență de trecere a argumentelor. Aici, în X, argumentele sunt declarate ca ByVal. Când rulați subrutina Y de această dată, ieșirea este:

în valoarea sub X a = 20
în valoarea sub Y a a = 10


Concluzie: Valoarea originalului a NU este modificată de sub X. Este 20 pentru X și 10 pentru Y.

Când Y apelează X cu a, acesta trimite doar valoarea lui, nu adresa unui. Prin urmare, orice modificare făcută într-o nu se reflectă în variabila originală.

Pentru test, dacă valoarea de imprimare a A în X înainte de a-l seta la 20, va imprima 10. Deoarece 10 este trecut la un în X folosind byVal. Folosind ByRef pe care l-ați trimis a lui Y la a lui X.

Este o întrebare ușoară, dar mulți dintre noi confundăm acest lucru, în întrebarea interviului vba. Motivul este că nu ajungem să-l folosim prea mult. De cele mai multe ori copiem valoarea într-o variabilă diferită.

Deci da, băieți, aceasta este diferența dintre argumentele ByRef și ByVal în Excel VBA. Spuneți-mi, dacă aveți vreo îndoială cu privire la acest subiect sau la orice alt subiect VBA sau Excel. Secțiunea de comentarii este a ta.

Adăugați și salvați un registru de lucru nou folosind VBA în Microsoft Excel 2016

Afișați un mesaj pe bara de stare Excel VBA

Dezactivați mesajele de avertizare folosind VBA în Microsoft Excel 2016

Articole populare:

Funcția VLOOKUP în Excel

COUNTIF în Excel 2016

Cum se utilizează funcția SUMIF în Excel