VBA ByVal - Kako koristiti argument funkcije ByVal? (Primjeri)

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.

Zanimljivi članci...