VBA ByRef

Excel VBA ByRef-functieargument

ByRef in VBA is een functie die wordt aangeroepen als door verwijzing waar we een verwijzing geven naar argumenten in onze code, wanneer we aangepaste functies maken en we de waarde willen gebruiken van een variabele die eerder is gedefinieerd voordat de functie we gebruiken ByRef-functie, de syntaxis om te gebruiken is eenvoudig als functie functienaam (ByRef-variabele als gegevenstype).

Door Byref te gebruiken, kunnen we naar de oorspronkelijke variabelewaarde verwijzen zonder de variabelewaarde te wijzigen. Dit is hetzelfde als het rechtstreeks doorgeven van de variabele waarde aan de VBA-subprocedure of VBA-functie.

Hoe een argument door te geven met behulp van VBA ByRef Argument?

U kunt deze VBA ByRef Excel-sjabloon hier downloaden - VBA ByRef Excel-sjabloon

Voorbeeld 1

Kijk voor een voorbeeld naar de onderstaande VBA-code.

Code1:

 Sub Procedure1 () Dim k As Integer k = 50 Procedure2 k MsgBox k End Sub 

Code2:

 Sub Procedure2 (ByRef k As Integer) k = k + 10 End Sub 

In de eerste procedure heb ik de variabele "k" gedeclareerd als geheel getal.

Vervolgens heb ik de waarde aan deze variabele toegewezen als 50.

Daarna heb ik een nieuwe regel toegevoegd, namelijk

Procedure2 k

Dit is de tweede procedurenaam. In deze procedure heb ik de variabele tussen haakjes gedeclareerd als String in VBA, maar ik heb het woord "ByRef" gebruikt.

 ByRef k As Integer 

Hier heb ik de waarde van de variabele "k" toegewezen als

k = k + 10

Ok, nu zal ik de code stap voor stap uitvoeren door op de F8-toets te drukken.

Druk nog twee keer op de F8-toets en plaats een cursor op variabele "k" om de waarde van de variabele "k" te zien.

Omdat we de waarde hebben toegewezen als 50, wordt de waarde weergegeven als 50. Nu is de regel Procedure2 k gemarkeerd, wat de tweede procedurenaam is.

Als ik nu op de F8-toets druk, springt het uit de huidige procedure en gaat het naar de tweede procedure.

Sinds we ByRef-woord hebben gebruikt, droeg het de variabele "k" -waarde van de bovenstaande procedure.

Druk tweemaal op de F8-toets om terug te gaan naar de vorige subprocedure. Als je in de tweede procedure opmerkt dat ik de formule heb toegepast als k = k + 10. dwz “k” waarde is 50 en voegt daar 10 extra aan toe, dwz 60 in totaal.

Nu wordt de code uitgevoerd in de eerste procedure en in deze procedure is de waarde van de variabele "k" 50. Maar druk op de F8-toets en zie het resultaat in een berichtvenster.

We kregen het resultaat als 60 in plaats van de standaardwaarde van 50 in deze procedure.

De reden waarom we 60 kregen, omdat we in de tweede procedure “ByRef” hebben toegepast, dus het heeft het resultaat van de vergelijking (k = k + 10) naar de huidige procedure overgedragen.

Hier is de waarde van de eerste variabele "k" 50 en in de tweede procedure is de waarde van de variabele "k" k + 10, dwz 60 die wordt overgedragen naar de eerste procedure.

In de eerste procedure was de oorspronkelijke waarde van de variabele “k” 50, dus By Ref heeft de oorspronkelijke waarde veranderd van 50 in 60 door de vergelijking k = k + 10 uit te voeren, dwz k = 50 +10 = 60.

Voorbeeld # 2

Bekijk nu nog een voorbeeld.

Code 1:

 Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber wordt gewijzigd door de Change_ByRef procedure MsgBox "MyNumber is nu:" & MyNumber End Sub 

Code 2:

 Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 End Sub 

Dit werkt precies hetzelfde als de vorige code.

Aanvankelijk is de waarde van de variabele “MyNumber” 1. Vervolgens noemen we de onderstaande procedure bij de naam

 Bel Change_ByRef (MyNumber)

In die procedure is de waarde van de variabele 14.

Dus als het teruggaat naar de vorige procedure, zal het de nieuwe waarde aan de variabele toewijzen als 14.