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