Hvad er forskellen mellem ByRef og ByVal argumenter? - VBA -interviewspørgsmål

Indholdsfortegnelse:

Anonim

Dette er et af de mest stillede spørgsmål i VBA -interviews. I denne artikel lærer vi, hvad der er forskellen mellem ByVal og ByRef argumenter i Excel VBA.

Definitioner:

ByRef argument: Det er den bogstavelige korte form som reference. Når et argument sendes som ByRef -argument til en anden sub eller funktion, sendes referencen til den faktiske variabel. Eventuelle ændringer, der foretages i kopien af ​​variablen, vil afspejle sig i det originale argument.
Vi kan sige, at værdiens placering i stedet for værdi sendes til funktion ved hjælp af ByRef til en funktion.
Dette er standardargumentet i VBA. Vi behøver ikke skrive ByRef før argument.
Syntaks:

Sub x (a som variant)

'Eller

Sub x (ByRef a som variant)

ByVal -argument: Det er en bogstavelig kort form af værdi. Når et argument sendes som ByVal -argument til en anden sub eller funktion, sendes kun argumentets værdi. Det oprindelige argument efterlades intakt. Eventuelle ændringer foretaget i fremmed funktion eller sub vil ikke afspejle sig i det originale argument.
For at erklære et argument som ByVal skal du bruge ByVal -søgeordet før argumentet.
Syntaks:
Sub x (ByVal a som variant)
Nu kender vi definitionerne. Lad os se et eksempel og komme over med det.

ByRef -eksempel

Her er et simpelt program.

Sub X (ByRef a As Variant) a = 20 Debug.Print "i sub X -værdien af ​​a =" & a Afslut Sub Sub Y () a = 10 Kald X (a) Debug.Print "i sub Y -værdi på a =" & a Afslut Sub 

Så her har vi to underrutiner. Første sub er X, der tager et variantargument som ByRef.
(Du kan udelade ByRef -søgeordet. Det er standard.)
Dernæst er det at indstille værdien af a = 20 slut udskriver derefter værdien af ​​a.

Sub Y er den vigtigste underprogram, der kalder subroutine x. Det sætter værdien af a = 10 kalder derefter underprogram X og passerer-en som et argument. Derefter udskriver den værdien af -en i Y.

Når du nu kører Sub Y, er dette det output, du får.
i sub X -værdien af ​​a = 20

i sub Y -værdien af ​​a = 20

Konklusion: Værdien af ​​original a ændres med sub X og sættes til 20 for begge subs.
du kan se, at når Sub Y kører, var startværdien af ​​a 10. Y kalder X (a). X angiver værdien af ​​a = 20. Det udskriver "i sub X -værdi på a = 20". Kontrol går tilbage til y og udskriver i sub Y -værdien a = 20.
Dette er effekten af ​​ByRef -argumentet.

ByVal -eksempel:

Dette er et ByVal -eksempel

Sub X (ByVal a Som variant) a = 20 Debug.Print "i sub X -værdien af ​​a =" & a Afslut Sub Sub Y () a = 10 Kald X (a) Debug.Print "i sub Y -værdi på a =" & a Afslut Sub

Begge eksempler er de samme med den eneste forskel på argument, der passerer. Her i X erklæres argumenter som ByVal. Når du kører Y -underprogram denne gang, er output:

i sub X -værdien af ​​a = 20
i sub Y -værdien af ​​a = 10


Konklusion: Værdien af ​​original a ændres IKKE med sub X. Den er 20 for X og 10 for Y.

Når Y kalder X med a, sender den kun værdien af ​​a ikke adressen på a. Derfor ændres enhver ændring i a ikke i den oprindelige variabel.

Til test, hvis udskrivningsværdien på -en i X, før den indstilles til 20, udskrives den 10. Fordi 10'en sendes til en i X ved hjælp af byVal. Brug af ByRef, du sendte en af ​​Y til a af X.

Det er et let spørgsmål, men mange af os forvirrer dette, i vba -interviewspørgsmål. Årsagen er, at vi ikke får brugt det meget. Det meste af tiden kopierer vi værdien i forskellige variabler.

Så ja fyre, dette er forskellen mellem ByRef og ByVal argumenter i Excel VBA. Lad mig vide, hvis du er i tvivl om dette emne eller andre VBA- eller Excel -emner. Kommentarfeltet er helt dit.

Tilføj og gem ny arbejdsmappe ved hjælp af VBA i Microsoft Excel 2016

Vis en meddelelse på Excel VBA -statuslinjen

Slå advarselsmeddelelser fra ved hjælp af VBA i Microsoft Excel 2016

Populære artikler:

VLOOKUP -funktionen i Excel

COUNTIF i Excel 2016

Sådan bruges SUMIF -funktionen i Excel