Mitä eroa ByRef- ja ByVal -argumenttien välillä on? - VBA -haastattelukysymys

Sisällysluettelo:

Anonim

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ä