Dies ist eine der am häufigsten gestellten Fragen in VBA-Interviews. In diesem Artikel erfahren Sie, was der Unterschied zwischen ByVal- und ByRef-Argumenten in Excel VBA ist.

Definitionen:

ByRef-Argument: Dies ist die wörtliche Kurzform von by reference. Wenn ein Argument als ByRef-Argument an ein anderes Sub oder eine andere Funktion übergeben wird, wird die Referenz der tatsächlichen Variablen gesendet. Alle Änderungen, die an der Kopie der Variablen vorgenommen werden, werden im ursprünglichen Argument wiedergegeben.

Wir können sagen, dass anstelle von Wert die Position des Werts mit ByRef an eine Funktion an die Funktion gesendet wird.

Dies ist das Standardargument in VBA. Wir müssen ByRef nicht vor dem Argument schreiben.

Syntax:

Sub x (a als Variante)

‘Oder Sub x (ByRef a als Variante)

ByVal-Argument: Es ist eine wörtliche Kurzform von by value. Wenn ein Argument als ByVal-Argument an ein anderes Sub oder eine andere Funktion übergeben wird, wird nur der Wert des Arguments gesendet. Das ursprüngliche Argument bleibt erhalten. Änderungen an der Fremdfunktion oder am Sub werden nicht im ursprünglichen Argument berücksichtigt.

Um ein Argument als ByVal zu deklarieren, müssen Sie vor dem Argument das Schlüsselwort ByVal verwenden.

Syntax:

Sub x (ByVal a als Variante)

Jetzt kennen wir die Definitionen. Schauen wir uns ein Beispiel an und kommen wir damit fertig.

ByRef Beispiel Hier ist ein einfaches Programm.

Sub X(ByRef a As Variant)

a = 20

Debug.Print "in sub X value of a = " & a

End Sub

Sub Y()

a = 10

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

Hier haben wir also zwei Unterprogramme. Das erste Sub ist X, das ein Variantenargument als ByRef verwendet. (Sie können das ByRef-Schlüsselwort weglassen. Dies ist die Standardeinstellung.)

Als nächstes wird der Wert von a = 20 eingestellt und dann der Wert von a gedruckt.

Sub Y ist die Haupt-Subroutine, die Subroutine X aufruft. Sie setzt den Wert von a = 10 und ruft dann Subroutine X und passesa als Argument auf.

Dann wird der Wert von a in Y gedruckt.

Wenn Sie nun Sub Y ausführen, erhalten Sie diese Ausgabe.

im Sub-X-Wert von a = 20 im Sub-Y-Wert von a = 20

0046

Schlussfolgerung: Der Wert von Original a wird durch Sub X geändert und für beide Subs auf 20 gesetzt. Sie können sehen, dass beim Ausführen von Sub Y der Anfangswert von a 10 war. Y ruft X (a) auf. X setzt den Wert von a = 20. Es wird „im Sub-X-Wert von a = 20“ gedruckt.

Die Steuerung kehrt zu y zurück und druckt im Sub-Y-Wert von a = 20.

Dies ist der Effekt des ByRef-Arguments.

ByVal Beispiel:

Dies ist ein ByVal-Beispiel

Sub X(ByVal a As Variant)

a = 20

Debug.Print "in sub X value of a = " & a

End Sub

Sub Y()

a = 10

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

Beide Beispiele sind identisch, mit dem einzigen Unterschied, dass Argumente übergeben werden.

Hier in X werden Argumente als ByVal deklariert. Wenn Sie dieses Mal das Unterprogramm Y ausführen, lautet die Ausgabe:

im Sub-X-Wert von a = 20 im Sub-Y-Wert von a = 10

0047

Schlussfolgerung: Der Wert von Original a wird von Sub X NICHT geändert. Er ist 20 für X und 10 für Y. Wenn Y X mit a aufruft, sendet es nur den Wert von a und nicht die Adresse von a.

Daher wird jede in a vorgenommene Änderung nicht in der ursprünglichen Variablen wiedergegeben.

Wenn Sie zum Testen den Wert von a in X drucken, bevor Sie ihn auf 20 setzen, wird 10 gedruckt. Da die 10 mit byVal an a in X übergeben wird. Mit ByRef haben Sie ein von Y an ein von X gesendet.

0048

Es ist eine einfache Frage, aber viele von uns verwechseln dies in einer vba-Interviewfrage. Der Grund ist, dass wir es nicht viel benutzen können. Meistens kopieren wir den Wert in verschiedene Variablen. * Also ja Leute, das ist der Unterschied zwischen ByRef- und ByVal-Argumenten in Excel VBA. Lassen Sie mich wissen, wenn Sie Zweifel an diesem Thema oder einem anderen VBA- oder Excel-Thema haben. Der Kommentarbereich gehört Ihnen.

Verwandte Artikel:

link: / files-arbeitsmappe-und-arbeitsblätter-in-vba-lösche-blätter-ohne-bestätigungs-aufforderungen-mit-vba-in-microsoft-excel [lösche blätter ohne bestätigungsaufforderungen mit VBA in Microsoft Excel]

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Neue Arbeitsmappe mit VBA in Microsoft Excel 2016 hinzufügen und speichern]

link: / menüs-Symbolleisten-Statusleiste-in-vba-Anzeige-einer-Nachricht-in-der-Statusleiste-mit-vba-in-Microsoft-Excel [Anzeige einer Nachricht in der Excel VBA-Statusleiste]

link: / allgemeine-themen-in-vba-ausschalten-warnwarnmeldungen-mit-vba-in-microsoft-excel [Warnmeldungen mit VBA in Microsoft Excel 2016 ausschalten]

Beliebte Artikel:

link: / formeln-und-funktionen-einführung-der-vlookup-funktion [Die VLOOKUP-Funktion in Excel]

link: / tips-countif-in-microsoft-excel [COUNTIF in Excel 2016]

link: / excel-formel-und-funktion-excel-sumif-funktion [Verwendung der SUMIF-Funktion in Excel]