VBA ByRef - Geef het argument door met behulp van de Excel VBA ByRef-functie

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 die 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?

Voorbeeld 1

Kijk bijvoorbeeld 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, dwz

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 50 hebben toegewezen, wordt de waarde 50 weergegeven. Nu is de regel Procedure2 k gemarkeerd , wat de tweede procedurenaam is.

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

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

Druk tweemaal op de F8-toets. Het gaat terug naar de vorige subprocedure. Als je merkt in de tweede procedure, heb ik de formule toegepast als k = k + 10. dwz, de "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 F8 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, zodat het resultaat van de vergelijking (k = k + 10) naar de huidige procedure werd 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 "My Number is now:" & 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.

Interessante artikelen...