Hva er forskjellen mellom ByRef og ByVal Arguments? - VBA intervju spørsmål

Innholdsfortegnelse:

Anonim

Dette er et av de mest stilte spørsmålene i VBA -intervjuer. I denne artikkelen lærer vi hva som er forskjellen mellom ByVal og ByRef argumenter i Excel VBA.

Definisjoner:

ByRef -argument: Det er den bokstavelige korte formen som referanse. Når et argument sendes som ByRef -argument til en annen sub eller funksjon, sendes referansen til den faktiske variabelen. Eventuelle endringer som gjøres i kopien av variabelen, gjenspeiles i det opprinnelige argumentet.
Vi kan si at stedet for verdi, blir plasseringen av verdien sendt til funksjon ved hjelp av ByRef til en funksjon.
Dette er standardargumentet i VBA. Vi trenger ikke å skrive ByRef før argument.
Syntaks:

Sub x (a som variant)

'Eller

Sub x (ByRef a som variant)

ByVal -argument: Det er en bokstavelig kort form av etter verdi. Når et argument sendes som ByVal -argument til en annen sub eller funksjon, sendes bare verdien av argumentet. Det opprinnelige argumentet forblir intakt. Eventuelle endringer gjort i utenlandsk funksjon eller sub vil ikke gjenspeiles i det opprinnelige argumentet.
For å erklære et argument som ByVal må du bruke ByVal -søkeordet før argumentet.
Syntaks:
Sub x (ByVal a som variant)
Nå kjenner vi definisjonene. La oss se et eksempel og komme over det.

ByRef -eksempel

Her er et enkelt program.

Sub X (ByRef a As Variant) a = 20 Debug.Print "i sub X -verdien av a =" & a Slutt Sub Sub Y () a = 10 Ring X (a) Debug.Print "i sub Y -verdien til a =" & a Slutt Sub 

Så her har vi to underrutiner. Første sub er X som tar et variantargument som ByRef.
(Du kan utelate ByRef -søkeordet. Det er standard.)
Deretter setter den verdien av a = 20 slutten skriver deretter ut verdien av a.

Under Y er hovedprogrammet som kaller subrutine X. Det setter verdien av a = 10 kaller deretter subrutine X og passereren som et argument. Deretter skriver den ut verdien av en i Y.

Når du kjører Sub Y, er dette utgangen du får.
i sub X -verdien på a = 20

i sub Y -verdien av a = 20

Konklusjon: Verdien av originalen a endres med sub X og settes til 20 for begge delene.
du kan se at når Sub Y kjører, var initialverdien til a 10. Y kaller X (a). X angir verdien av a = 20. Den skriver ut "i sub X -verdien på a = 20". Kontrollen går tilbake til y og skriver ut i sub Y -verdien på a = 20.
Dette er effekten av ByRef -argumentet.

ByVal -eksempel:

Dette er et ByVal -eksempel

Sub X (ByVal a As Variant) a = 20 Debug.Print "i sub X -verdien av a =" & a Slutt Sub Sub Y () a = 10 Ring X (a) Debug.Print "i sub Y -verdien til a =" & a Slutt Sub

Begge eksemplene er de samme med den eneste forskjellen på argument som går forbi. Her i X blir argumenter erklært som ByVal. Når du kjører Y -underprogrammet denne gangen er utgangen:

i sub X -verdien på a = 20
i sub Y -verdien av a = 10


Konklusjon: Verdien av originalen a endres IKKE med sub X. Den er 20 for X og 10 for Y.

Når Y ringer X med a, sender den bare verdien av a ikke adressen til a. Derfor endres ikke alle endringer i a i den opprinnelige variabelen.

For test, hvis utskriftsverdi på en i X før du setter den til 20, vil den skrive ut 10. Fordi 10 sendes til a i X ved hjelp av byVal. Bruker ByRef du sendte en av Y til a av X.

Det er et enkelt spørsmål, men mange av oss forvirrer dette, i vba intervju spørsmål. Grunnen er at vi ikke får brukt det mye. Mesteparten av tiden kopierer vi verdien i en annen variabel.

Så ja, dette er forskjellen mellom ByRef og ByVal -argumenter i Excel VBA. Gi meg beskjed hvis du er i tvil om dette emnet eller andre VBA- eller Excel -emner. Kommentarseksjonen er din.

Legg til og lagre ny arbeidsbok ved hjelp av VBA i Microsoft Excel 2016

Vis en melding på Excel VBA -statuslinjen

Slå av advarselsmeldinger ved hjelp av VBA i Microsoft Excel 2016

Populære artikler:

VLOOKUP -funksjonen i Excel

COUNTIF i Excel 2016

Slik bruker du SUMIF -funksjonen i Excel