VBA ByVal - Hvordan bruke ByVal Function Argument? (Eksempler)

Excel VBA ByVal Funksjonsargument

ByVal er en uttalelse i VBA. ByVal står for By Value, dvs. når delprosedyren som ble kalt inn fra prosedyren, tilbakestilles verdien til variablene til den nye verdien fra den nye prosedyren som er kalt inn.

I VBA, når vi jobber med funksjoner som kalles i forskjellige funksjoner, er det visse omstendigheter at verdien for det opprinnelige argumentet endres når funksjonen blir kalt; byval-setningen forbyr prosedyren eller koden som endrer verdien for argumentet.

Jeg vet at det ikke er lett å forstå ved å lese forklaringen, men med praktiske eksempler på funksjon kan vi faktisk forstå bedre.

Hvordan bruke ByVal Argument i VBA?

Eksempel 1

Se for eksempel på VBA-kodene nedenfor.

Kode:

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

I de ovennevnte to makroprosedyrene har vi en felles variabel “k” på tvers av prosedyrer. La meg forklare dette i detalj før vi ser resultatet.

I den første makroen har vi tilordnet verdien 50 til variabelen “k.”

Dim k As Integer k = 50

Deretter har vi kalt den andre makroprosedyren fra den første makroen.

Makro2 k

I Macro2 har vi tilbakestilt verdien til variabelen til k = k + 5. I denne makroen har vi brukt ByVal-argumentet for å tilordne verdien til variabelen “k.”

For å forstå “ByVal”, la oss kjøre VBA-koden linje for linje ved å trykke på F8-tasten.

# 1 - Når du først trykker på F8-tasten, vil den fremheve den første linjen i Makro1.

På dette tidspunktet plasserer du en markør på variabelen “k”, og den skal vise verdien til variabelen “k”.

For øyeblikket er verdien av “k” null.

# 2 - Trykk på F8-tasten en gang til, så hopper den til tredje linje.

Selv nå er verdien av “k” fortsatt null.

# 3 - Trykk på F8-tasten nå og se verdien av k.

Siden “k” -verdien er satt til 50 og koden blir utført, og verdien vises som 50.

# 4 - Nå er den markerte linjen "Macro2 k", dvs. ved å trykke på F8-tasten, hopper den til den andre prosedyren, Macro2.

# 5 - Selv nå viser verdien av variabelen "k" i denne prosedyren også som 50. Men inne i denne makroen tilbakestiller vi verdien til variabelen "k" som k = k + 5 dvs. 55. Trykk nå på F8-tast to ganger til.

Som du kan se ovenfor er k verdien nå 55.

# 6 - Trykk på F8-tasten, så hopper den tilbake til Macro1-prosedyren.

Når makroen hoppet tilbake til den opprinnelige prosedyren Macro1, er ikke vår variable "k" -verdi lenger 55, men den opprinnelige verdien i denne prosedyren, dvs. 50.

Når du trykker på F8-tasten, kan vi bare se 50 i meldingsboksen i VBA.

Så, som vi har fortalt i begynnelsen av artikkelen, bærer argumentet "ByVal" ikke verdier fra en prosedyre til en annen, selv om den bærer verdien av variabelen fra den første makroen til den andre i det øyeblikket den møter linjen " ByVal ”når den kommer tilbake til den opprinnelige makroen, tilbakestiller den verdien til originalverdien bare i prosedyren.

Eksempel 2

Ta en titt på de to makroene nedenfor.

Kode:

Sub P1 () Dim k As Integer: k = 10 Call P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Dette ligner på det første eksemplet. I makroen "P1" har vi tilordnet verdien 10 til variabelen "k", og i samme makro "P1" har vi kalt den andre makroen "P2" med variabelen "k."
  • I den andre makroen "P2" har vi brukt ByVal-argumentet, og denne gangen er verdien av variabelen "k" 15.

Denne makroen bærer verdien av variabelen "k" som ti fra makroen "P1" til makroen "P2", og i denne makroen vil verdien bli tilbakestilt til 15, men i det øyeblikket den kommer tilbake for å fullføre makroen til den første makroen “P1” verdien “k” tilbake til 10, ikke 15.

Ting å huske

Argumentet ByVal påvirker ikke variabelverdien selv etter at makroen er kjørt, men med By Ref-argumentet kan vi føre verdien til variabelen fra den ene makroen til den andre.

Interessante artikler...