Kakšna je razlika med argumenti ByRef in ByVal? - VBA Vprašanje za intervju

Kazalo:

Anonim

To je eno najpogostejših vprašanj v intervjujih za VBA. V tem članku bomo izvedeli, kakšna je razlika med argumenti ByVal in ByRef v Excelu VBA.

Opredelitve pojmov:

Argument ByRef: To je dobesedno kratka oblika sklicevanja. Ko se argument posreduje kot argument ByRef na drugo podmnožico ali funkcijo, se pošlje sklic na dejansko spremenljivko. Vse spremembe v kopiji spremenljivke se odražajo v izvirnem argumentu.
Lahko rečemo, da se namesto vrednosti mesto vrednosti pošlje v funkcijo z uporabo ByRef v funkcijo.
To je privzeti argument v VBA. Pred argumentom nam ni treba pisati ByRef.
Sintaksa:

Sub x (a kot varianta)

‘Or

Sub x (ByRef a kot varianta)

Argument ByVal: To je dobesedno kratka oblika po vrednosti. Ko se argument posreduje kot argument ByVal na drugo pod -funkcijo ali funkcijo, se pošlje samo vrednost argumenta. Prvotni argument ostane nedotaknjen. Vse spremembe tujih funkcij ali podrejencev se ne bodo odražale v izvirnem argumentu.
Če želite argument razglasiti za ByVal, morate pred argumentom uporabiti ključno besedo ByVal.
Sintaksa:
Sub x (ByVal a kot varianta)
Zdaj poznamo definicije. Poglejmo primer in ga zaključimo.

Primer ByRefa

Tukaj je preprost program.

Sub X (ByRef a As Variant) a = 20 Debug.Natisnite "v pod X vrednosti a =" & a Konec podpodd. Y () a = 10 Pokličite X (a) Debug.Print "v pod Y vrednosti a =" & a End Sub 

Torej, tukaj imamo dve podprogrami. Prvi podmeni je X, ki sprejme variantni argument kot ByRef.
(Ključno besedo ByRef lahko izpustite. Privzeta je.)
Nato nastavi vrednost a = 20 end nato natisne vrednost a.

Pod Y je glavna podprogram, ki kliče podprogram X. Določa vrednost a = 10 nato pokliče podprogram X in podaa kot argument. Nato natisne vrednost a v Y.

Ko zaženete Sub Y, je to rezultat, ki ga dobite.
v pod X vrednost a = 20

v pod Y vrednosti a = 20

Zaključek: Vrednost izvirnika a se spremeni za pod X in nastavi na 20 za oba podsklada.
lahko vidite, da je bila pri zagonu Sub Y začetna vrednost a 10. Y kliče X (a). X nastavi vrednost a = 20. Natisne "v sub X vrednosti a = 20". Nadzor se vrne na y in natisne z vrednostjo pod Y a = 20.
To je učinek argumenta ByRef.

Primer ByVal:

To je primer podjetja ByVal

Sub X (ByVal a As Variant) a = 20 Debug.Natisnite "v pod X vrednosti a =" & a Konec podpodd. Y () a = 10 Pokličite X (a) Debug.Print "v sub Y vrednosti a =" & a End Sub

Oba primera sta enaka z edino razliko pri podajanju argumentov. Tukaj v X so argumenti deklarirani kot ByVal. Ko tokrat zaženete podprogram Y, je rezultat:

v pod X vrednost a = 20
v pod Y vrednost a = 10


Zaključek: Vrednosti izvirnika a NE spreminja podpomen X. Za X je 20, za Y pa 10.

Ko Y pokliče X z a, pošlje samo vrednost a, ne naslov a. Zato se vsaka sprememba v a ne odraža v izvirni spremenljivki.

Za preskus, če je vrednost tiskanja a v X, preden ga nastavite na 20, bo natisnil 10. Ker je 10 posredovano v X s pomočjo byVal. Z uporabo ByRefa, ki ste ga poslali a od Y do a od X.

Vprašanje je preprosto, vendar mnogi med nami to vprašanje v intervjuju vba zamešajo. Razlog je v tem, da ga ne uporabljamo veliko. Večino časa kopiramo vrednost v drugo spremenljivko.

Torej ja, fantje, to je razlika med argumenti ByRef in ByVal v Excelu VBA. Sporočite mi, če dvomite glede te teme ali katere koli druge teme VBA ali Excel. Oddelek s komentarji je vaš.

Dodajte in shranite nov delovni zvezek z uporabo VBA v programu Microsoft Excel 2016

Prikaz sporočila v vrstici stanja Excel VBA

Izklopite opozorilna sporočila z uporabo VBA v programu Microsoft Excel 2016

Priljubljeni članki:

Funkcija VLOOKUP v Excelu

COUNTIF v Excelu 2016

Kako uporabljati funkcijo SUMIF v Excelu