Argument funkcije Excel VBA ByVal
ByVal je izjava u VBA-u. ByVal je skraćenica od By Value (vrijednost), tj. Kada se potprocedura pozvana iz postupka vrijednost varijabli resetira na novu vrijednost iz nove procedure koja se poziva.
U VBA-u, kada radimo s funkcijama koje se pozivaju u različitim funkcijama, postoje određene okolnosti da se vrijednost izvornog argumenta mijenja kada se funkcija poziva; izjava byval zabranjuje postupak ili kod koji mijenja vrijednost argumenta.
Znam da to nije lako razumjeti čitajući objašnjenje, ali s praktičnim primjerima funkcije zapravo možemo bolje razumjeti.

Kako koristiti ByVal Argument u VBA?
Primjer # 1
Na primjer, pogledajte dolje navedene VBA kodove.
Kodirati:
Podmakronaredba1 () Dim k Kao cjelobrojno k = 50 Makro2 k MsgBox k Kraj podm
Sub Makro2 (ByVal k Kao cjelina) k = k + 5 Kraj Sub

U gornja dva makroprocedura imamo zajedničku varijablu "k" među procedurama. Dopustite mi da to detaljno objasnim prije nego što vidimo rezultat.
U prvom Makronaredbi varijabli "k" dodijelili smo vrijednost 50
Dim k As Integer k = 50
Dalje, pozvali smo drugi postupak makronaredbe iz prvog Makronaredbe.
Makro2 k
U Makro2 vratili smo vrijednost varijable na k = k + 5. U ovoj smo makronaredbi koristili argument ByVal za dodjeljivanje vrijednosti varijabli „k“.
Da bismo sada razumjeli "ByVal", pokrenimo VBA kodni redak po redak pritiskom na tipku F8.
# 1 - Nakon prvog pritiska tipke F8, istaknut će prvi redak Macro1.

U ovom trenutku postavite kursor na varijablu "k" i ona bi trebala prikazivati vrijednost varijable "k".

Trenutno je vrijednost "k" nula.
# 2 - Pritisnite tipku F8 još jednom i ona će skočiti na treći redak.

Čak i sada, vrijednost "k" i dalje je nula.
# 3 - Pritisnite tipku F8 sada i pogledajte vrijednost k.

Budući da je vrijednost "k" postavljena na 50, a kôd se izvršava, pa se vrijednost prikazuje kao 50.
# 4 - Sada je označena linija "Macro2 k", tj. Pritiskom na tipku F8 skočit će na drugi postupak, Macro2.

# 5 - Čak i sada, vrijednost varijable "k" u ovom postupku također se prikazuje kao 50. Ali unutar ove makronaredbe resetiramo vrijednost varijable "k" kao k = k + 5, tj. 55. Sada pritisnite Tipka F8 još dva puta.

Kao što vidite gore, vrijednost "k" sada je 55.
# 6 - Pritisnite tipku F8 i vratit će se na postupak Macro1.

Kad se makronaredba vratila na izvorni postupak Macro1, naša varijabla "k" vrijednost više nije 55, već izvorna vrijednost u ovom postupku, tj. 50.
Kad pritisnete tipku F8, u okviru za poruke u VBA možemo vidjeti samo 50.

Dakle, kao što smo rekli na početku članka, argument „ByVal“ ne prenosi vrijednosti iz jednog postupka u drugi, iako nosi vrijednost varijable iz prve makronaredbe u sekundu do trenutka kada naiđe na liniju „ ByVal ”kada se vrati na izvornu makronaredbu, vraća vrijednost na izvornu vrijednost samo u postupku.
Primjer # 2
Sada pogledajte donja dva makronaredbe.
Kodirati:
Sub P1 () Dim k As Integer: k = 10 Pozovite P2 (k) MsgBox k End Sub
Sub P2 (ByVal k kao cjelina) k = 15 Kraj Sub

- Ovo je slično prvom primjeru. U makronaredbi "P1" varijabli "k" dodijelili smo vrijednost 10, a u istoj makronaredbi "P1" nazvali smo drugu makronaredbu "P2" s varijablom "k".
- U drugoj makronaredbi "P2" koristili smo argument ByVal i ovaj je put vrijednost varijable "k" 15.
Ova makronaredba nosi vrijednost varijable "k" kao deset od makronaredbe "P1" do makronaredbe "P2", a u ovoj makronaredbi vrijednost će se resetirati na 15, ali onog trenutka kada se vrati da završi makronaredbu na prvu makronaredbu "P1" vrijednost "k" vrati na 10, a ne na 15.

Stvari koje treba zapamtiti
Argument ByVal ne utječe na vrijednost varijable čak i nakon pokretanja makronaredbe, ali s argumentom By Ref možemo prenijeti vrijednost varijable iz jedne makronaredbe u drugu.