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