Tämä on yksi VBA -haastattelujen useimmin kysytyistä kysymyksistä. Tässä artikkelissa opimme, mikä ero on ByVal- ja ByRef -argumenttien välillä Excel VBA: ssa.
Määritelmät:
ByRef argumentti: Se on kirjaimellisesti lyhyt viittausmuoto. Kun argumentti välitetään ByRef -argumenttina toiselle ala- tai funktiolle, todellisen muuttujan viite lähetetään. Muuttujan kopioon tehdyt muutokset näkyvät alkuperäisessä argumentissa.
Voimme sanoa, että arvon sijainnin sijaan arvon sijainti lähetetään funktiolle ByRef -funktiolla.
Tämä on VBA: n oletusargumentti. Meidän ei tarvitse kirjoittaa ByRef ennen väittelyä.
Syntaksi:
Sub x (a vaihtoehtona)
'Tai
Sub x (ByRef a vaihtoehtona)
ByVal -argumentti: Se on kirjaimellisesti lyhyt muoto arvoltaan. Kun argumentti välitetään ByVal -argumenttina toiselle ala- tai funktiolle, vain argumentin arvo lähetetään. Alkuperäinen väite jätetään ennalleen. Kaikki vieraassa funktiossa tai alaosassa tehdyt muutokset eivät näy alkuperäisessä argumentissa.
Jos haluat julistaa argumentin ByValiksi, sinun on käytettävä ByVal -avainsanaa ennen argumenttia.
Syntaksi:
Sub x (ByVal a vaihtoehtona)
Nyt tiedämme määritelmät. Katsotaan esimerkkiä ja päästään siitä yli.
ByRef Esimerkki
Tässä on yksinkertainen ohjelma.
Osa X (ByRef a Variant) a = 20 Debug.Print "osa X: n arvoon a =" & a Lopeta alaosa Y () a = 10 Soita X (a) Debug.Print "osa Y: n arvoon a =" & a End Sub
Tässä on siis kaksi aliohjelmaa. Ensimmäinen osa on X, joka ottaa varianttiargumentin muotoon ByRef.
(Voit jättää ByRef -avainsanan pois. Se on oletusarvo.)
Seuraavaksi se asettaa arvon a = 20 end tulostaa sitten arvon a.
Sub Y on aliohjelma, joka kutsuu aliohjelmaa X. Se asettaa arvon a = 10 kutsuu sitten aliohjelman X ja kulkeea väitteenä. Sitten se tulostaa arvon a vuonna Y.
Nyt kun suoritat Sub Y: n, tämä on ulostulo, jonka saat.
osa X: ssä a = 20
ala -Y -arvossa a = 20
Johtopäätös: Alkuperäisen a arvo muutetaan osa X: llä ja asetetaan arvoksi 20 molemmille alaryhmille.
näet, että kun osa Y suoritetaan, a: n alkuarvo oli 10. Y kutsuu X (a). X asettaa arvon a = 20. Se tulostaa "osa X: n arvoon a = 20". Ohjaus siirtyy takaisin kohtaan y ja tulostaa alaryhmän Y arvoon a = 20.
Tämä on ByRef -argumentin vaikutus.
ByVal Esimerkki:
Tämä on ByVal -esimerkki
Sub X (ByVal a Varianttina) a = 20 Debug.Print "osa X: n arvoon a =" & a Lopeta alaosa Y () a = 10 Soita X (a) Debug.Print "osa Y: n arvoon a =" & a End Sub
Molemmat esimerkit ovat samat, kun argumenttien kulku eroaa. Tässä X: ssä argumentit ilmoitetaan ByVal. Kun suoritat Y -aliohjelman tällä kertaa, tulos on:
osa X: ssä a = 20
ala -Y -arvossa a = 10
Johtopäätös: Alkuperäisen a arvoa EI muuta ala X. Se on 20 X: lle ja 10 Y: lle.
Kun Y kutsuu X: tä a: lla, se lähettää vain arvon a, ei osoitteen a. Näin ollen kaikki a: ssa tehdyt muutokset eivät näy alkuperäisessä muuttujassa.
Testaa, jos tulostusarvo on a X: ssä ennen kuin asetat sen 20: ksi, se tulostaa 10. Koska 10 välitetään a: lle X käyttäen byVal. Lähettämäsi ByRefin avulla a Y: stä kohteeseen a X: stä.
Se on helppo kysymys, mutta monet meistä sekoittavat tämän vba -haastattelukysymyksessä. Syy on se, että emme saa käyttää sitä paljon. Suurimman osan ajasta kopioimme arvon eri muuttujaan.
Joten kyllä kaverit, tämä on ero bw ByRef- ja ByVal -argumentteissa Excel VBA: ssa. Kerro minulle, jos sinulla on epäilyksiä tästä aiheesta tai muista VBA- tai Excel -aiheista. Kommenttiosa on sinun.
Lisää ja tallenna uusi työkirja VBA: n avulla Microsoft Excel 2016: ssa
Näytä viesti Excel VBA -tilapalkissa
Poista varoitusviestit käytöstä VBA: n avulla Microsoft Excel 2016: ssa
Suosittuja artikkeleita:
VLOOKUP -toiminto Excelissä
COUNTIF Excel 2016: ssa
SUMIF -toiminnon käyttäminen Excelissä