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