VBA ByVal - Wie verwende ich das ByVal-Funktionsargument? (Beispiele)

Excel VBA ByVal-Funktionsargument

ByVal ist eine Anweisung in VBA. ByVal steht für By Value, dh wenn die von der Prozedur aufgerufene Unterprozedur der Wert der Variablen von der aufgerufenen neuen Prozedur auf den neuen Wert zurückgesetzt wird.

Wenn wir in VBA mit Funktionen arbeiten, die in verschiedenen Funktionen aufgerufen werden, gibt es bestimmte Umstände, unter denen der Wert für das ursprüngliche Argument geändert wird, wenn die Funktion aufgerufen wird. Die byval-Anweisung verbietet die Prozedur oder den Code, der den Wert für das Argument ändert.

Ich weiß, dass es nicht leicht zu verstehen ist, wenn man die Erklärung liest, aber mit praktischen Funktionsbeispielen können wir tatsächlich besser verstehen.

Wie verwende ich ByVal Argument in VBA?

Beispiel 1

Schauen Sie sich zum Beispiel die folgenden VBA-Codes an.

Code:

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

In den beiden oben genannten Makroprozeduren haben wir eine gemeinsame Variable "k" für alle Prozeduren. Lassen Sie mich dies im Detail erklären, bevor wir das Ergebnis sehen.

Im ersten Makro haben wir der Variablen "k" den Wert 50 zugewiesen.

Dim k As Integer k = 50

Als nächstes haben wir die zweite Makroprozedur vom ersten Makro aufgerufen.

Macro2 k

Im Makro2 haben wir den Wert der Variablen auf k = k + 5 zurückgesetzt. In diesem Makro haben wir das ByVal-Argument verwendet, um den Wert der Variablen "k" zuzuweisen.

Um „ByVal“ zu verstehen, lassen Sie uns den VBA-Code Zeile für Zeile ausführen, indem Sie die Taste F8 drücken.

# 1 - Wenn Sie zuerst die Taste F8 drücken, wird die erste Zeile des Macro1 hervorgehoben.

Setzen Sie zu diesem Zeitpunkt einen Cursor auf die Variable "k" und er sollte den Wert der Variablen "k" anzeigen.

Im Moment ist der Wert von "k" Null.

# 2 - Drücken Sie die F8-Taste noch einmal und es springt zur dritten Zeile.

Selbst jetzt ist der Wert von "k" immer noch Null.

# 3 - Drücken Sie jetzt die Taste F8 und sehen Sie den Wert von k.

Da der "k" -Wert auf 50 gesetzt ist und Code ausgeführt wird, wird der Wert als 50 angezeigt.

# 4 - Jetzt ist die hervorgehobene Zeile "Macro2 k", dh durch Drücken der Taste F8 wird zur zweiten Prozedur, Macro2, gesprungen.

# 5 - Auch jetzt wird der Wert der Variablen "k" in dieser Prozedur ebenfalls als 50 angezeigt. In diesem Makro setzen wir jedoch den Wert der Variablen "k" als k = k + 5 zurück, dh 55. Drücken Sie nun die Taste F8 noch zweimal drücken.

Wie Sie oben sehen können, beträgt der Wert „k“ jetzt 55.

# 6 - Drücken Sie die Taste F8, um zur Macro1-Prozedur zurückzukehren.

Wenn das Makro zur ursprünglichen Prozedur Macro1 zurücksprang, ist unser variabler "k" -Wert nicht mehr 55, sondern der ursprüngliche Wert in dieser Prozedur, dh 50.

Wenn Sie die Taste F8 drücken, werden im Meldungsfeld in VBA nur 50 angezeigt.

Wie wir am Anfang des Artikels gesagt haben, überträgt das Argument „ByVal“ keine Werte von einer Prozedur zur nächsten, obwohl es den Wert der Variablen vom ersten Makro zum zweiten überträgt, sobald sie auf die Zeile trifft. ByVal “Wenn es zum ursprünglichen Makro zurückkehrt, wird der Wert nur in der Prozedur auf den ursprünglichen Wert zurückgesetzt.

Beispiel 2

Schauen Sie sich nun die beiden folgenden Makros an.

Code:

Sub P1 () Dim k As Integer: k = 10 Aufruf von P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Dies ähnelt dem ersten Beispiel. Im Makro "P1" haben wir der Variablen "k" den Wert 10 zugewiesen, und im gleichen Makro "P1" haben wir das zweite Makro "P2" mit der Variablen "k" genannt.
  • Im zweiten Makro "P2" haben wir das ByVal-Argument verwendet, und diesmal ist der Wert der Variablen "k" 15.

Dieses Makro trägt den Wert der Variablen "k" als zehn von Makro "P1" zu Makro "P2", und in diesem Makro wird der Wert auf 15 zurückgesetzt, aber sobald es zurückkommt, um das Makro zum ersten Makro zu beenden "P1" der Wert von "k" zurück auf 10, nicht auf 15.

Dinge, an die man sich erinnern sollte

Das ByVal-Argument wirkt sich auch nach dem Ausführen des Makros nicht auf den Variablenwert aus. Mit dem By Ref-Argument können wir den Wert der Variablen von einem Makro zum anderen übertragen.

Interessante Beiträge...