Vad är skillnaden mellan ByRef- och ByVal -argument? - VBA -intervjufråga

Innehållsförteckning:

Anonim

Detta är en av de vanligaste frågorna i VBA -intervjuer. I den här artikeln lär vi oss vad som är skillnaden mellan ByVal och ByRef -argument i Excel VBA.

Definitioner:

ByRef -argument: Det är den bokstavliga kortformen som referens. När ett argument skickas som ByRef -argument till en annan sub eller funktion skickas referensen till den faktiska variabeln. Alla ändringar som görs i kopian av variabeln kommer att återspeglas i originalargumentet.
Vi kan säga att, i stället för värde, skickas värdets plats till funktion med ByRef till en funktion.
Detta är standardargumentet i VBA. Vi behöver inte skriva ByRef före argument.
Syntax:

Sub x (a som variant)

'Eller

Sub x (ByRef a som variant)

ByVal -argument: Det är en bokstavlig kort form av efter värde. När ett argument skickas som ByVal -argument till en annan sub eller funktion skickas endast argumentets värde. Det ursprungliga argumentet lämnas intakt. Eventuella ändringar som görs i utländsk funktion eller sub kommer inte att återspeglas i det ursprungliga argumentet.
För att deklarera ett argument som ByVal måste du använda ByVal -nyckelordet före argumentet.
Syntax:
Sub x (ByVal a som variant)
Nu känner vi till definitionerna. Låt oss se ett exempel och sluta med det.

ByRef Exempel

Här är ett enkelt program.

Sub X (ByRef a As Variant) a = 20 Debug.Print "i sub X -värdet för a =" & a Avsluta Sub Sub Y () a = 10 Ring X (a) Debug.Print "i sub Y -värde för a =" & a Avsluta Sub 

Så här har vi två delrutiner. Första sub är X som tar ett variantargument som ByRef.
(Du kan utelämna ByRef -sökordet. Det är standard.)
Därefter är det att ställa in värdet på a = 20 slutet skriver sedan ut värdet på a.

Sub Y är den huvudsakliga subrutinen som kallar subroutine X. Det sätter värdet på a = 10 ringer sedan subrutin X och passerara som argument. Sedan skriver det ut värdet av a i Y.

Nu när du kör Sub Y är detta utgången du får.
i sub X -värde på a = 20

i sub Y -värdet på a = 20

Slutsats: Värdet på originalet a ändras med sub X och sätts till 20 för båda delarna.
du kan se att när Sub Y körs var initialvärdet för a 10. Y anropar X (a). X anger värdet på a = 20. Den skriver ut "i sub X -värde på a = 20". Kontrollen går tillbaka till y och skriver ut i sub Y -värdet a = 20.
Detta är effekten av ByRef -argumentet.

ByVal Exempel:

Detta är ett ByVal -exempel

Sub X (ByVal a As Variant) a = 20 Debug.Print "i sub X -värdet för a =" & a Avsluta Sub Sub Y () a = 10 Ring X (a) Debug.Print "i sub Y -värde för a =" & a Avsluta Sub

Båda exemplen är desamma med den enda skillnaden i argument som passerar. Här i X deklareras argument som ByVal. När du kör Y -underrutan den här gången är utsignalen:

i sub X -värde på a = 20
i sub Y -värde på a = 10


Slutsats: Värdet på originalet a ändras INTE med sub X. Det är 20 för X och 10 för Y.

När Y ringer X med a, skickar det bara värdet på a inte adressen till a. Därför återspeglas inte alla ändringar i a i den ursprungliga variabeln.

För test, om utskriftsvärdet av a i X innan du ställer in det till 20, kommer det att skrivas ut 10. Eftersom tio -talet skickas till ett i X med byVal. Med ByRef skickade du en av Y till a av X.

Det är en lätt fråga, men många av oss förvirrar detta, i vba -intervjufråga. Anledningen är att vi inte får använda det mycket. För det mesta kopierar vi värdet i olika variabler.

Så ja killar, det här är skillnaden mellan ByRef och ByVal -argument i Excel VBA. Låt mig veta om du har några tvivel angående detta ämne eller något annat VBA- eller Excel -ämne. Kommentarsektionen är din.

Lägg till och spara ny arbetsbok med VBA i Microsoft Excel 2016

Visa ett meddelande i Excel VBA -statusfältet

Stäng av varningsmeddelanden med VBA i Microsoft Excel 2016

Populära artiklar:

VLOOKUP -funktionen i Excel

COUNTIF i Excel 2016

Hur man använder SUMIF -funktionen i Excel