Tai vienas dažniausiai užduodamų klausimų VBA interviu metu. Šiame straipsnyje sužinosime, kuo skiriasi „ByVal“ ir „ByRef“ argumentai „Excel VBA“.
Apibrėžimai:
ByRef argumentas: Tai pažodinė trumpa nuoroda. Kai argumentas perduodamas kaip ByRef argumentas kitam padaliniui ar funkcijai, siunčiama faktinio kintamojo nuoroda. Bet kokie kintamojo kopijos pakeitimai atsispindės pradiniame argumente.
Galime pasakyti, kad vietoj vertės vertės funkcija yra siunčiama funkcijai naudojant funkciją „ByRef“.
Tai yra numatytasis argumentas VBA. Mums nereikia rašyti ByRef prieš ginčą.
Sintaksė:
Sub x (a kaip variantas)
„Arba
Sub x (ByRef a kaip variantas)
ByVal argumentas: Tai pažodinė trumpa pagal vertę forma. Kai argumentas perduodamas kaip „ByVal“ argumentas kitam padaliniui ar funkcijai, siunčiama tik argumento vertė. Pradinis argumentas paliekamas nepažeistas. Bet kokie užsienio funkcijos ar poskyrio pakeitimai neatspindės pradiniame argumente.
Norėdami paskelbti argumentą „ByVal“, prieš argumentą turite naudoti „ByVal“ raktinį žodį.
Sintaksė:
Sub x („ByVal a“ kaip variantas)
Dabar mes žinome apibrėžimus. Pažvelkime į pavyzdį ir susitvarkykime.
ByRef pavyzdys
Čia yra paprasta programa.
X poskyris („ByRef a As Variant“) a = 20 Derinti. Spausdinti "į a =" & a X antrinę reikšmę Pabaiga Y poskyris () a = 10 Skambinkite X (a) Debug.Print "į Y poskyrio reikšmę a =" & a Pabaiga Sub
Taigi, čia yra dvi paprogramės. Pirmasis poskyris yra X, kuris argumento variantą priima kaip ByRef.
(Galite praleisti „ByRef“ raktinį žodį. Tai numatytasis.)
Toliau nustatoma vertė a = 20 pabaiga tada atspausdina a reikšmę.
Sub Y yra pagrindinė paprograma, vadinama paprograma X. Jis nustato vertę a = 10 tada iškviečia paprogramę X ir praeinaa kaip argumentas. Tada spausdinama vertė a Y.
Dabar, kai paleidžiate „Sub Y“, tai yra rezultatas.
X poskyryje a = 20
Y poskyryje a = 20
Išvada: originalo a reikšmė pakeičiama X antra dalimi ir nustatoma į 20 abiem dalims.
matote, kad kai veikia Y sub, pradinė a reikšmė buvo 10. Y iškviečia X (a). X nustato reikšmę a = 20. Jis atspausdinamas „X poskyrio reikšme a = 20“. Valdymas grįžta į y ir spausdinamas Y poskyrio reikšme a = 20.
Tai ByRef argumento poveikis.
„ByVal“ pavyzdys:
Tai „ByVal“ pavyzdys
„Sub X“ („ByVal“ kaip variantas) a = 20 Derinti. Spausdinti "X a poskyrio reikšmėje a =" & a Pabaiga Y poskyris () a = 10 Skambinkite X (a) Debug.Print "į„ Y "a reikšmę„ a = "& a Pabaiga Sub
Abu pavyzdžiai yra vienodi, tik skiriasi argumentų perdavimas. Čia X argumentai deklaruojami kaip „ByVal“. Šį kartą paleidus Y paprogramę, išvestis yra:
X poskyryje a = 20
Y poskyryje a = 10
Išvada: originalo a reikšmė NĖRA keičiama X poskyrio. X yra 20, o Y - 10.
Kai Y skambina X su a, jis siunčia tik a reikšmę, o ne adresą. Taigi bet kokie a pakeitimai neatsispindi pradiniame kintamajame.
Bandymui, jei spausdinimo vertė a X, prieš nustatydamas jį į 20, jis atspausdins 10. Kadangi 10 yra perduodamas a į X naudojant byVal. Naudodami „ByRef“, kurį išsiuntėte a iš Y į a iš X.
Tai lengvas klausimas, tačiau daugelis iš mūsų tai supainioja, interviu „vba“. Priežastis ta, kad nelabai juo pasinaudojame. Dažniausiai mes kopijuojame vertę į kitą kintamąjį.
Taigi taip, vaikinai, tai yra skirtumas tarp „ByRef“ ir „ByVal“ argumentų „Excel VBA“. Praneškite man, jei turite kokių nors abejonių dėl šios ar kitos VBA ar „Excel“ temos. Komentarų skiltis yra jūsų.
Pridėkite ir išsaugokite naują darbaknygę naudodami „Microsoft Excel 2016“ VBA
Rodyti pranešimą „Excel“ VBA būsenos juostoje
Išjunkite įspėjamuosius pranešimus naudodami VBA programoje „Microsoft Excel 2016“
Populiarūs straipsniai:
„VLOOKUP“ funkcija „Excel“
COUNTIF „Excel 2016“
Kaip naudoti „SUMIF“ funkciją „Excel“