VBA ByVal - Hvordan bruges ByVal-funktionsargument? (Eksempler)

Excel VBA ByVal-funktionsargument

ByVal er en erklæring i VBA. ByVal står for By Value, dvs. når delproceduren kaldes ind fra proceduren, nulstilles variablenes værdi til den nye værdi fra den nye kaldte procedure.

I VBA, når vi arbejder med funktioner, der kaldes i forskellige funktioner, er der visse omstændigheder, at værdien for det oprindelige argument ændres, når funktionen kaldes; byval-sætningen forbyder proceduren eller koden, der ændrer værdien for argumentet.

Jeg ved, at det ikke er let at forstå ved at læse forklaringen, men med praktiske eksempler på funktion kan vi faktisk forstå bedre.

Hvordan bruges ByVal Argument i VBA?

Eksempel nr. 1

Se f.eks. Nedenstående VBA-koder.

Kode:

Undermakro1 () Dim k Som heltal k = 50 Makro2 k MsgBox k Afslut sub
Undermakro2 (ByVal k som heltal) k = k + 5 Afslut sub

I ovenstående to makroprocedurer har vi en fælles variabel “k” på tværs af procedurer. Lad mig forklare dette detaljeret, før vi ser resultatet.

I den første makro har vi tildelt værdien 50 til variablen “k”.

Dim k Som heltal k = 50

Dernæst har vi kaldt den anden makroprocedure fra den første makro.

Makro2 k

I Macro2 har vi nulstillet værdien af ​​variablen til k = k + 5. I denne makro har vi brugt ByVal-argumentet til at tildele værdien til variablen “k.”

For at forstå “ByVal”, lad os køre VBA-koden linje for linje ved at trykke på F8-tasten.

# 1 - Når du først trykker på F8-tasten, fremhæver den den første linje i Makro1.

På dette tidspunkt skal du placere en markør på variablen “k”, og den skal vise værdien af ​​variablen “k”.

I øjeblikket er værdien af ​​“k” nul.

# 2 - Tryk på F8-tasten en gang mere, og den springer til tredje linje.

Selv nu er værdien af ​​“k” stadig nul.

# 3 - Tryk på F8-tasten nu og se værdien af ​​k.

Da “k” -værdien er indstillet til 50, og koden udføres, og værdien vises som 50.

# 4 - Nu er den fremhævede linje "Macro2 k", dvs. ved at trykke på F8-tasten, springer den til den anden procedure, Macro2.

# 5 - Selv nu vises værdien af ​​variablen “k” i denne procedure også som 50. Men inde i denne makro nulstiller vi værdien af ​​variablen “k” som k = k + 5 dvs. 55. Tryk nu på F8-tast to gange mere.

Som du kan se ovenfor er “k” værdien 55 nu.

# 6 - Tryk på F8-tasten, så springer den tilbage til Macro1-proceduren.

Når makroen sprang tilbage til den oprindelige procedure Macro1, er vores variable “k” -værdi ikke længere 55 snarere den oprindelige værdi i denne procedure, dvs. 50.

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

Så som vi har fortalt i begyndelsen af ​​artiklen "ByVal" argument bærer ikke værdier fra en procedure til en anden, selvom det bærer værdien af ​​variablen fra den første makro til den anden i det øjeblik, den møder linjen " ByVal ”når den kommer tilbage til den oprindelige makro, nulstiller den kun værdien til den oprindelige værdi i proceduren.

Eksempel 2

Se nu på nedenstående to makroer.

Kode:

Sub P1 () Dim k Som heltal: k = 10 Opkald P2 (k) MsgBox k End Sub
Sub P2 (ByVal k som heltal) k = 15 End Sub
  • Dette svarer til det første eksempel. I makroen "P1" har vi tildelt værdien 10 til variablen "k", og i den samme makro "P1" har vi kaldt den anden makro "P2" med variablen "k."
  • I den anden makro “P2” har vi brugt ByVal-argumentet, og denne gang er værdien af ​​variablen “k” 15.

Denne makro bærer værdien af ​​variablen “k” som ti fra makroen “P1” til makroen “P2”, og i denne makro nulstilles værdien til 15, men i det øjeblik det kommer tilbage for at afslutte makroen til den første makro “P1” værdien af ​​“k” tilbage til 10, ikke 15.

Ting at huske

Argumentet ByVal påvirker ikke variabelværdien selv efter kørsel af makroen, men med By Ref-argumentet kan vi bære værdien af ​​variablen fra den ene makro til den anden.

Interessante artikler...