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