VBA ByRef Argument Type Mismatch Error - Top 3 Gründe & Fehlerbehebungen

ByRef-Argumenttyp stimmt nicht mit Excel VBA überein

In diesem Artikel erklären wir den Fehler, der bei der Verwendung von Excel VBA ByRef als "Argument Type Mismatch Error" auftritt. Vorher möchte ich Ihnen zunächst „By Ref“ vorstellen. Variablen sind der Schlüssel zu jeder Programmiersprache, und VBA unterscheidet sich auch nicht. Wir haben viele Möglichkeiten gesehen, Variablen zu deklarieren. Eine solche Art, Variablen zu deklarieren, ist die Verwendung der Wörter "ByRef" und "ByVal".

Was bedeutet ByRef?

"ByRef" bedeutet "By Reference", wenn dieses Wort verwendet wird. Wir können Argumente tatsächlich als Referenz an Prozeduren (sowohl für Unter- als auch für Funktionen) übergeben. Dies ist anders als bei seinem Bruder "By Val", der nicht flexibel, sondern fest verankert ist.

Um dies zu verstehen, werfen wir einen Blick auf die beiden folgenden Makros.

Code:

Sub Macro1 () Dim A As Long A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Wir haben hier zwei Unterverfahren mit den Namen Macro1 bzw. Macro2. Um dies besser zu verstehen, führen Sie das Makro Zeile für Zeile aus, indem Sie die Taste F8 drücken.

Drücken Sie die Taste F8, um den Wert der Variablen „A“ als 50 zu erfassen.

In der nächsten Codezeile steht "Macro2 A", dh der Name des zweiten Makros, und "A" ist die Variable, die durch das Wort "By Ref" definiert wird.

Wie Sie oben sehen können, ist die Codezeile „Macro2 A“ in dem Moment, in dem wir sie ausführen, von der obigen Prozedur zur nächsten VBA-Unterprozedur gesprungen.

Jetzt können wir sehen, dass der Wert der Variablen "A" 50 ist. Dies liegt daran, dass wir, da wir das Wort "ByRef" verwendet haben, um die Variable "A" zu deklarieren, die mit Macro1 identisch ist, den Wert erfasst hat, den wir haben dieser Variablen "A" vom Makro1 zugewiesen .

In dieser Makrogleichung ( Makro2 ) heißt es nun A = A * 10, dh A = 50 * 100. Drücken Sie dreimal die Taste F8, um zum obigen Makro ( Makro1 ) zurückzukehren.

Drücken Sie nun noch einmal die Taste F8, um den Wert der Variablen „A“ im Meldungsfeld in VBA anzuzeigen.

Der Wert sagt 500.

Obwohl der Wert, den wir in diesem Makro (Makro1) zugewiesen haben, 50 ist, haben wir mithilfe des ByRef-Wortes die Makro2-Unterprozedur ausgelöst, indem wir den Wert der Variablen "A" von Makro1 beibehalten und dann den Wert von A durch Multiplizieren von 10 ausführen.

Die drei wichtigsten Gründe für die Nichtübereinstimmung des VBA-Byref-Argumenttyps

Oben haben wir gesehen, wie „ByRef“ funktioniert, aber wir mussten einige der Fehler machen, die ausnahmslos dazu führten, dass eine VBA-Fehlermeldung als „ByRef Argument Type Mismatch“ ausgegeben wurde.

Dies hat viele Gründe. In diesem Abschnitt zeigen wir Ihnen, wie Sie diesen Fehler beheben und den Code debuggen können.

Fehlergrund Nr. 1 - Unterschiedliche Variablennamen

Einer der Hauptgründe für diesen Fehler in Excel VBA sind unterschiedliche Variablen, die in zwei Prozeduren übergeben wurden. Schauen Sie sich zum Beispiel die folgenden Codes an.

Code:

Sub Macro1 () Dim A As Long A = 50 Macro2 B MsgBox A End Sub Sub Macro2 (ByRef A As Long) B = B * 10 End Sub

In Makro1 haben wir die Variable "A" verwendet, und in Makro2 haben wir die Variable "B" verwendet. Wenn Sie nun versuchen, den Code auszuführen, wird der VBA-Fehler als "ByRef Argument Type Mismatch" angezeigt.

Wie Sie oben sehen können, wurde die Variable "B" hervorgehoben, da der Typ des Variablennamens nicht übereinstimmt.

Lösung: Um dieses Problem zu beheben, müssen Sie sicherstellen, dass die Variablennamen in beiden Verfahren genau sind.

Fehlergrund 2: Verschiedene variable Datentypen

Obwohl die Variablennamen identisch sind, verursacht dies dennoch einen Fehler. Dies liegt an dem Datentyp, den wir ihnen zuweisen. Schauen Sie sich den folgenden Code an.

Code:

Sub Macro1 () Dim A As Integer A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

In den obigen Codes habe ich die Variable "A" als ganzzahligen Datentyp in Macro1 deklariert, und in Macro2 wurde derselben Variablen der Datentyp "Long" zugewiesen.

Wenn wir diesen Code ausführen, wird ein VBA-Fehler "ByRef Argument Type Mismatch" verursacht.

Dies liegt daran, dass wir zwei verschiedene Datentypen für denselben Variablennamen zugewiesen haben.

Lösung: Der Datentyp sollte in beiden Verfahren gleich sein.

Fehlergrund 3: Variable Datentypen fehlen in einem Makro

Der Excel VBA-Fehler "ByRef Argument Type Mismatch" kann aufgrund des Datentyps auftreten, der in einem Makro zugewiesen und in einem anderen Makro nicht zugewiesen wurde.

Code:

Sub Macro1 () A = 50 Macro2 A MsgBox A End Sub Sub Macro2 (ByRef A As Long) A = A * 10 End Sub

Im obigen Code von Macro1 habe ich keine Variable deklariert, sondern einfach den Wert der Variablen zugewiesen.

Andererseits habe ich für Macro2 die Variable "A" so lange deklariert. Wenn Sie versuchen, diesen Code auszuführen, wird der VBA-Fehler "ByRef Argument Type Mismatch" verursacht.

Lösung 1: Um solche Situationen zu vermeiden, besteht die erste Lösung darin, die Variable in beiden Prozeduren zu deklarieren und denselben Datentyp zuzuweisen.

Lösung 2: Eine alternative Lösung besteht darin, die Variablendeklaration durch Hinzufügen des Wortes "Option Explicit" oben im Modul obligatorisch zu machen.

Dies führt dazu, dass wir, bevor der VBA-Fehler "ByRef Argument Type Mismatch" angezeigt wird, die Variable zuerst deklarieren müssen.

Daher ist Option Explicit in VBA immer nützlich.

Dinge, an die man sich erinnern sollte

  • ByRef ist das Gegenteil von By Val.
  • ByRef überträgt die Referenz von einer Prozedur zur anderen.
  • Der Variablenname und der Datentyp sollten in beiden Prozeduren gleich sein.
  • Jede Variable muss bei mehreren Variablen separat deklariert werden.

Interessante Beiträge...