VBA ByVal - Cum se utilizează argumentul funcției ByVal? (Exemple)

Argumentul funcției Excel VBA ByVal

ByVal este o declarație în VBA. ByVal înseamnă By Value, adică atunci când subprocedura apelată din procedură, valoarea variabilelor este resetată la noua valoare din noua procedură apelată.

În VBA, când lucrăm cu funcții care sunt numite în funcții diferite, există anumite circumstanțe în care valoarea pentru argumentul original este modificată atunci când funcția este apelată; declarația byval interzice procedura sau codul care modifică valoarea argumentului.

Știu că nu este ușor de înțeles citind explicația, dar cu exemple practice de funcție, putem înțelege mai bine.

Cum se utilizează ByVal Argument în VBA?

Exemplul nr. 1

De exemplu, uitați-vă la codurile VBA de mai jos.

Cod:

Sub Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Sub Macro2 (ByVal k Ca întreg) k = k + 5 End Sub

În cele două proceduri macro de mai sus, avem o variabilă comună „k” între proceduri. Permiteți-mi să explic acest lucru în detaliu înainte de a vedea rezultatul.

În prima macro, am atribuit valoarea 50 variabilei „k”.

Dim k Întreg k = 50

Apoi, am numit a doua procedură macro din prima macro.

Macro2 k

În Macro2, am resetat valoarea variabilei la k = k + 5. În această macro, am folosit argumentul ByVal pentru a atribui valoarea variabilei „k”.

Acum, pentru a înțelege „ByVal”, haideți să rulăm codul VBA linie cu linie apăsând tasta F8.

# 1 - La apăsarea mai întâi a tastei F8, va evidenția prima linie a Macro1.

În acest moment, plasați un cursor pe variabila „k” și ar trebui să afișeze valoarea variabilei „k”.

În acest moment, valoarea „k” este zero.

# 2 - Apăsați tasta F8 încă o dată și va trece la a treia linie.

Chiar și acum, valoarea „k” este încă zero.

# 3 - Apăsați tasta F8 acum și vedeți valoarea k.

Deoarece valoarea „k” este setată la 50 și codul este executat și deci valoarea este afișată ca 50.

# 4 - Acum, linia evidențiată este „Macro2 k”, adică, prin apăsarea tastei F8, va trece la a doua procedură, Macro2.

# 5 - Chiar și acum, valoarea variabilei „k” în această procedură arată, de asemenea, ca 50. Dar în interiorul acestei macro, resetăm valoarea variabilei „k” ca k = k + 5, adică 55. Acum apăsați tasta Tasta F8 de încă două ori.

După cum puteți vedea mai sus, valoarea „k” este acum 55.

# 6 - Apăsați tasta F8 și va reveni la procedura Macro1.

Când macro-ul a sărit înapoi la procedura originală Macro1, valoarea variabilă „k” nu mai este de 55 mai degrabă decât valoarea inițială din această procedură, adică 50.

Când apăsați tasta F8, putem vedea doar 50 în caseta de mesaj din VBA.

Deci, așa cum am spus la începutul articolului, argumentul „ByVal” nu transportă valori de la o procedură la alta, chiar dacă poartă valoarea variabilei de la prima macro la a doua în momentul în care întâlnește linia „ ByVal ”când revine la macro-ul original, resetează valoarea la valoarea originală numai în procedură.

Exemplul nr. 2

Acum aruncați o privire la cele două macro-uri de mai jos.

Cod:

Sub P1 () Dim k Întreg: k = 10 Apel P2 (k) MsgBox k End Sub
Sub P2 (ByVal k Ca întreg) k = 15 End Sub
  • Acest lucru este similar cu primul exemplu. În macro-ul „P1”, am atribuit valoarea 10 variabilei „k”, iar în aceeași macro „P1”, am numit a doua macro „P2” cu variabila „k”.
  • În cea de-a doua macro „P2”, am folosit argumentul ByVal, iar de data aceasta, valoarea variabilei „k” este 15.

Această macrocomandă poartă valoarea variabilei „k” ca zece de la macrocomanda „P1” la macrocomanda „P2”, iar în această macrocomandă valoarea va fi resetată la 15, dar în momentul în care revine pentru a termina macrocomanda la prima macrocomandă „P1” valoarea „k” înapoi la 10, nu la 15.

Lucruri de amintit

Argumentul ByVal nu afectează valoarea variabilei chiar și după executarea macro-ului, dar cu argumentul By Ref, putem transporta valoarea variabilei de la o macro la alta.

Articole interesante...