Nicht übereinstimmender VBA ByRef-Argumenttyp

ByRef-Argumenttyp stimmt nicht mit Excel VBA überein

In diesem Artikel erläutern 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". Mit diesem Wort können wir tatsächlich Argumente 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, die als Macro1 bzw. Macro2 bezeichnet werden. Um dies besser zu verstehen, führen Sie das Makro Zeile für Zeile durch Drücken der Taste F8 aus.

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, haben wir in dem Moment, in dem wir die Codezeile "Macro2 A" 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 dieser Variablen "zugewiesen" haben. A ”vom Macro1 .

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 Unterprozedur "Makro2" 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.

Sie können diese VBA ByRef-Argumenttyp-Nichtübereinstimmungs-Excel-Vorlage hier herunterladen - VBA ByRef-Argumenttyp-Nichtübereinstimmungs-Excel-Vorlage

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. Ein Beispiel finden Sie in den folgenden Codes.

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" und in Makro2 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 Variablennamen immer noch identisch sind, verursacht dies einen Fehler, der auf den Datentyp zurückzuführen ist, 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 in Macro1 die Variable "A" als Integer-Datentyp 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 eines 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, führt dies zu einem VBA-Fehler "ByRef Argument Type Mismatch".

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, aufgefordert werden, die Variable zuerst zu deklarieren.

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.