VBA ByRef

Excel VBA ByRef-funktionsargument

ByRef i VBA är en funktion som kallas som referens där vi ger en hänvisning till alla argument i vår kod, när vi gör anpassade funktioner och vi vill använda värdet på alla variabler som definierats tidigare före funktionen vi använder ByRef-funktionen syntax att använda är enkelt som Funktionsfunktionsnamn (ByRef-variabel som datatyp).

Genom att använda Byref kan vi peka på det ursprungliga variabelvärdet utan att ändra variabelvärdet. Detta är som att skicka variabelvärdet direkt till VBA-delproceduren eller VBA-funktionen.

Hur skickas argument med VBA ByRef Argument?

Du kan ladda ner denna VBA ByRef Excel-mall här - VBA ByRef Excel-mall

Exempel nr 1

För ett exempel, se nedanstående VBA-kod.

Kod1:

 Delprocedur1 () Dim k Som heltal k = 50 Procedur2 k MsgBox k Avslut Sub 

Kod2:

 Underförfarande2 (ByRef k som heltal) k = k + 10 Avsluta sub 

I det första förfarandet har jag förklarat variabeln “k” som heltal.

Sedan har jag tilldelat värdet till denna variabel 50.

Efter det har jag lagt till en ny rad, dvs.

Förfarande2 k

Detta är det andra procedurnamnet. I det här förfarandet har jag förklarat variabeln inom parentes som sträng i VBA men jag har använt ordet “ByRef”.

 ByRef k som heltal 

Här har jag tilldelat värdet på variabeln "k" som

k = k + 10

Ok, nu kör jag koden steg för steg genom att trycka på F8-tangenten.

Tryck på F8-tangenten två gånger till och placera en markör på variabeln "k" för att se värdet på variabeln "k".

Eftersom vi har tilldelat värdet som 50, visar det värdet som 50. Nu har det markerat raden Procedur2 k som är det andra procedurnamnet.

Om jag trycker på F8-tangenten kommer den att hoppa ur den aktuella proceduren och gå till den andra proceduren.

Nu eftersom vi har använt ByRef-ordet bar det variabeln "k" -värdet från ovanstående procedur.

Tryck på F8-tangenten två gånger för att gå tillbaka till föregående delprocedur. Om du märker i den andra proceduren har jag använt formeln som k = k + 10. dvs “k” -värdet är 50 och lägger till ytterligare 10 till det dvs 60 totalt.

Nu körs koden i den första proceduren och i denna procedur är variabeln “k” 50. Men tryck på F8-tangenten och se resultatet i en meddelandefält.

Vi fick resultatet som 60 istället för standardvärdet 50 i denna procedur.

Anledningen till att vi fick 60 eftersom vi i den andra proceduren har tillämpat "ByRef" så, det bar ekvationsresultatet (k = k + 10) till det nuvarande förfarandet.

Här är den första variabeln "k" -värdet 50 och i den andra proceduren är variabeln "k" k + 10, dvs 60 som överförs till den första proceduren.

I den första proceduren var det ursprungliga värdet på variabeln "k" 50, så By Ref har ändrat det ursprungliga värdet från 50 till 60 genom att exekvera k = k + 10, dvs k = 50 +10 = 60.

Exempel 2

Ta nu en titt på ytterligare ett exempel.

Kod 1:

 Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber is changed by the Change_ByRef procedure MsgBox "My Number is now:" & MyNumber End Sub 

Kod 2:

 Sub Change_ByRef (ByRef NewNumber Så länge) NewNumber = 14 End Sub 

Detta fungerar exakt samma som den tidigare koden.

Ursprungligen är värdet på variabeln "MyNumber" 1. Sedan kallar vi proceduren nedan med dess namn

 Ring Change_ByRef (MyNumber)

I det förfarandet är variabelns värde 14.

Så när det går tillbaka till föregående procedur tilldelas det nya värdet till variabeln som 14.