„Excel VBA ByRef“ funkcijos argumentas
„ByRef“ VBA yra funkcija, vadinama nuoroda, kur mes pateikiame nuorodą į visus mūsų kodo argumentus, kai darome pasirinktines funkcijas ir norime naudoti bet kurio kintamojo, kuris anksčiau buvo apibrėžtas prieš funkciją, kurią naudojame „ByRef“, reikšmę, sintaksė yra paprasta kaip Funkcijos Funkcijos pavadinimas („ByRef“ kintamasis kaip duomenų tipas).
Naudodami Byref galime nurodyti pradinę kintamojo vertę nekeisdami kintamojo vertės. Tai panašu į kintamosios vertės perdavimą tiesiogiai VBA subprocedūrai arba VBA funkcijai.

Kaip perduoti argumentą naudojant VBA ByRef argumentą?
1 pavyzdys
Pavyzdžiui, pažvelkite į žemiau esantį VBA kodą.
Kodas1:
1 procedūra () Dim k As sveikoji k = 50 Procedūra2 k MsgBox k End Sub

Kodas2:
Antrinė antrinė procedūra (ByRef k kaip sveikasis skaičius) k = k + 10 Pabaigos antrinis

Pirmosios procedūros metu kintamąjį „k“ paskelbiau sveikuoju skaičiumi.
Tada priskyriau šio kintamojo vertę kaip 50.
Po to aš pridėjau naują eilutę, t
Procedūra2 k
Tai yra antrasis procedūros pavadinimas. Šioje procedūroje skliausteliuose kintamąjį paskelbiau kaip eilutę VBA, tačiau naudojau žodį „ByRef“.
ByRef k kaip sveikasis skaičius
Čia priskyriau kintamojo „k“ vertę kaip
k = k + 10
Gerai, dabar aš paleidžiu kodą žingsnis po žingsnio paspausdamas klavišą F8.


Dar du kartus paspauskite klavišą F8 ir padėkite žymeklį ant kintamojo „k“, kad pamatytumėte kintamojo „k“ vertę.

Kadangi priskyrėme vertę kaip 50, ji rodo vertę kaip 50. Dabar ji paryškino eilutę Proced2 k, kuri yra antrasis procedūros pavadinimas.
Jei dabar paspausiu F8 klavišą, jis iššoks iš dabartinės procedūros ir pereis prie antrosios procedūros.

Kadangi mes naudojome ByRef žodį, jis turėjo kintamąją „k“ vertę iš pirmiau nurodytos procedūros.

Du kartus paspauskite klavišą F8. Tai grįš į ankstesnę subprocedūrą. Jei pastebėsite per antrąją procedūrą, aš pritaikiau formulę kaip k = k + 10. ty „k“ reikšmė yra 50, tada prie tos prideda dar 10, ty iš viso 60.

Dabar kodas vykdomas pagal pirmąją procedūrą, o šioje procedūroje kintamojo „k“ reikšmė yra 50. Tačiau paspauskite klavišą F8 ir pamatykite rezultatą pranešimo laukelyje.

Šioje procedūroje rezultatas buvo 60, o ne numatytoji 50.
Priežastis, kodėl gavome 60, nes per antrąją procedūrą pritaikėme „ByRef“, todėl dabartinei procedūrai ji suteikė lygties rezultatą (k = k + 10).
Čia pirmojo kintamojo „k“ vertė yra 50, o antroje procedūroje kintamojo „k“ vertė yra k + 10, ty 60, kuri perkeliama į pirmąją procedūrą.
Pirmosios procedūros metu kintamojo „k“ pradinė vertė buvo 50, todėl „By Ref“ pakeitė pradinę vertę nuo 50 iki 60, vykdant lygtį k = k + 10, ty k = 50 +10 = 60.
2 pavyzdys
Dabar pažvelk į dar vieną pavyzdį.
1 kodas:
P1 poskyris () Tamsinti mano numerį kaip ilgą Mano numerį = 1 Skambinti Change_ByRef (ManoNumerį) 'ManoNumerį pakeičia procedūra Change_ByRef MsgBox "Mano numeris dabar:" & ManoNumerio pabaiga
2 kodas:
Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 pabaigos sub

Tai veikia lygiai taip pat, kaip ir ankstesnis kodas.
Iš pradžių kintamojo „MyNumber“ vertė yra 1. Tada mes pavadiname toliau nurodytą procedūrą jo pavadinimu
Skambinti Change_ByRef („MyNumber“)
Taikant šią procedūrą, kintamojo vertė yra 14.
Taigi, kai grįšite į ankstesnę procedūrą, ji priskirs naują reikšmę kintamajam kaip 14.
