VBA ByVal - Hur använder man ByVal-funktionsargument? (Exempel)

Innehållsförteckning

Excel VBA ByVal-funktionsargument

ByVal är ett uttalande i VBA. ByVal står för By Value, dvs när delproceduren som anropas från proceduren återställs värdet på variablerna till det nya värdet från den nya proceduren som anropas.

I VBA, när vi arbetar med funktioner som kallas i olika funktioner, finns det vissa omständigheter att värdet för det ursprungliga argumentet ändras när funktionen anropas; byval-uttalandet förbjuder proceduren eller koden som ändrar värdet för argumentet.

Jag vet att det inte är lätt att förstå genom att läsa förklaringen, men med praktiska exempel på funktion kan vi faktiskt förstå bättre.

Hur använder man ByVal Argument i VBA?

Exempel 1

Se till exempel nedanstående VBA-koder.

Koda:

Sub Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Sub Makro2 (ByVal k som heltal) k = k + 5 End Sub

I ovanstående två makroförfaranden har vi en gemensam variabel ”k” över procedurer. Låt mig förklara detta i detalj innan vi ser resultatet.

I den första makroen har vi tilldelat variabeln "k" värdet 50.

Dim k som heltal k = 50

Därefter har vi kallat det andra makroförfarandet från det första makrot.

Makro2 k

I Macro2 har vi återställt variabelns värde till k = k + 5. I detta makro har vi använt ByVal-argumentet för att tilldela värdet till variabeln "k."

Nu för att förstå "ByVal", låt oss köra VBA-koden rad för rad genom att trycka på F8-tangenten.

# 1 - När du först trycker på F8-tangenten markeras den första raden i Macro1.

Vid denna tidpunkt placerar du en markör på variabeln "k" och den ska visa värdet på variabeln "k."

För närvarande är värdet “k” noll.

# 2 - Tryck på F8-tangenten en gång till och den hoppar till tredje raden.

Även nu är värdet på “k” fortfarande noll.

# 3 - Tryck på F8-tangenten nu och se värdet på k.

Eftersom “k” -värdet är inställt på 50 och koden exekveras och så visas värdet som 50.

# 4 - Nu är den markerade raden "Macro2 k", dvs genom att trycka på F8-tangenten hoppar den till den andra proceduren, Macro2.

# 5 - Även nu visas värdet på variabeln "k" i denna procedur också som 50. Men inuti detta makro återställer vi värdet på variabeln "k" som k = k + 5 dvs 55. Tryck nu på F8-tangent två gånger till.

Som du kan se ovan är “k” -värdet 55 nu.

# 6 - Tryck på F8-tangenten så hoppar den tillbaka till Macro1-proceduren.

När makrot hoppade tillbaka till den ursprungliga proceduren Macro1 är vårt variabla “k” -värde inte längre 55 utan det ursprungliga värdet i denna procedur, dvs. 50.

När du trycker på F8-tangenten kan vi bara se 50 i meddelandefältet i VBA.

Så, som vi har sagt i början av artikeln "ByVal" argumentet bär inte värden från en procedur till en annan, även om den bär värdet på variabeln från det första makrot till det andra när det möter raden ByVal ”när det kommer tillbaka till det ursprungliga makrot återställer det värdet till det ursprungliga värdet endast i proceduren.

Exempel 2

Ta en titt på nedanstående två makron.

Koda:

Sub P1 () Dim k As Integer: k = 10 Call P2 (k) MsgBox k End Sub
Sub P2 (ByVal k som heltal) k = 15 End Sub
  • Detta liknar det första exemplet. I makrot "P1" har vi tilldelat variabeln "k" värdet 10 och i samma makro "P1" har vi kallat det andra makrot "P2" med variabeln "k."
  • I det andra makrot "P2" har vi använt ByVal-argumentet, och den här gången är värdet på variabeln "k" 15.

Detta makro bär värdet på variabeln "k" som tio från makro "P1" till makro "P2", och i detta makro återställs värdet till 15, men i det ögonblick det kommer tillbaka för att avsluta makrot till det första makrot “P1” värdet på “k” tillbaka till 10, inte 15.

Saker att komma ihåg

Argumentet ByVal påverkar inte variabelvärdet även efter att ha kört makrot, men med argumentet By Ref kan vi bära värdet på variabeln från ett makro till ett annat.

Intressanta artiklar...