Koja je razlika između ByRef i ByVal argumenata? - Pitanje za VBA intervju

Sadržaj:

Anonim

Ovo je jedno od najčešće postavljanih pitanja u VBA intervjuima. U ovom ćemo članku naučiti koja je razlika između ByVal i ByRef argumenata u Excelu VBA.

Definicije:

Argument ByRef: To je doslovni kratki oblik reference. Kada se argument prenese kao ByRef argument na drugu pod -funkciju ili funkciju, šalje se referenca stvarne varijable. Sve promjene napravljene u kopiji varijable bit će odražene u izvornom argumentu.
Možemo reći da se umjesto vrijednosti mjesto vrijednosti šalje funkciji pomoću funkcije ByRef u funkciju.
Ovo je zadani argument u VBA -i. Ne moramo pisati ByRef prije argumentacije.
Sintaksa:

Sub x (a kao varijanta)

'Ili

Sub x (ByRef a kao varijanta)

ByVal argument: To je doslovno kratki oblik vrijednosti. Kad se argument prenese kao ByVal argument na drugu pod -funkciju ili funkciju, šalje se samo vrijednost argumenta. Izvorni argument ostaje netaknut. Sve promjene napravljene u stranoj funkciji ili podmeniju neće se odraziti u izvornom argumentu.
Za deklariranje argumenta kao ByVal morate koristiti ključnu riječ ByVal prije argumenta.
Sintaksa:
Sub x (ByVal a kao varijanta)
Sada znamo definicije. Pogledajmo primjer i prebolimo ga.

Primjer ByRefa

Evo jednostavnog programa.

Pod X (ByRef a kao varijanta) a = 20 Debug.Print "in sub X value of a =" & a Završi pod -pod Y () a = 10 Pozovite X (a) Debug.Print "u pod Y vrijednosti od a =" & a Kraj podm 

Dakle, ovdje imamo dvije podrutine. Prva podmena je X koja uzima varijantni argument kao ByRef.
(Možete izostaviti ključnu riječ ByRef. Zadana je vrijednost.)
Zatim postavlja vrijednost a = 20 end ispisuje vrijednost a.

Pod Y je glavna potprogram koja naziva potprogram x. Postavlja vrijednost od a = 10 zatim poziva potprogram X i prolazia kao argument. Zatim ispisuje vrijednost od a u Y.

Kad pokrenete Sub Y, ovo je izlaz koji dobijete.
u pod X vrijednost a = 20

u pod Y vrijednost a = 20

Zaključak: Vrijednost izvornika a mijenja se pod X i postavlja na 20 za oba podskupina.
možete vidjeti da je prilikom pokretanja Sub Y početna vrijednost a bila 10. Y poziva X (a). X postavlja vrijednost a = 20. Ispisuje "u sub X vrijednosti a = 20". Kontrola se vraća na y i ispisuje u vrijednosti ispod Y od a = 20.
Ovo je učinak ByRef argumenta.

Primjer ByVala:

Ovo je ByVal primjer

Sub X (ByVal a kao varijanta) a = 20 Debug.Print "in sub X value of a =" & a Završi pod -pod Y () a = 10 Pozovite X (a) Debug.Print "u pod Y vrijednosti od a =" & a Kraj podm

Oba primjera su ista s jedinom razlikom u prenošenju argumenata. Ovdje u X, argumenti su deklarirani kao ByVal. Kada ovaj put pokrenete potprogram Y, izlaz je:

u pod X vrijednost a = 20
u pod Y vrijednosti a = 10


Zaključak: Vrijednost izvornika a se NE mijenja pod X. Ona je 20 za X i 10 za Y.

Kad Y pozove X s a, on šalje samo vrijednost a, a ne adresu a. Stoga se svaka promjena napravljena u a ne odražava u izvornoj varijabli.

Za test, ako je vrijednost ispisa od a u X -u prije nego što ga postavite na 20, ispisat će 10. Budući da se 10 prenosi u X u sustavu byVal. Koristeći ByRef koji ste poslali a od Y do a od X.

Lako je pitanje, ali mnogi od nas zbunjuju ovo pitanje u intervjuu vba. Razlog je što ga ne stignemo puno koristiti. Većinu vremena kopiramo vrijednost u drugu varijablu.

Pa da, dečki, ovo je razlika bw ByRef i ByVal argumenata u excelu VBA. Javite mi ako imate bilo kakvih nedoumica u vezi ove teme ili bilo koje druge teme VBA ili Excel. Odjeljak s komentarima je samo vaš.

Dodajte i spremite novu radnu knjigu pomoću VBA -a u programu Microsoft Excel 2016

Prikažite poruku na statusnoj traci programa Excel VBA

Isključite poruke upozorenja pomoću VBA u programu Microsoft Excel 2016

Popularni članci:

Funkcija VLOOKUP u Excelu

COUNTIF u Excelu 2016

Kako koristiti funkciju SUMIF u Excelu