Argumenttyp ByRef unverträglich

JEDER der öfter VBA programmiert kennt diese Fehlermeldung: “Argumenttyp ByRef unverträglich”. Die Lösung ist ganz einfach. Das nervige daran ist, dass einen die Hilfe hierbei vollkommen im Stich lässt.
Und warum geht das Auto-Complete in 8 geht und in Zeile 7 nicht?

Ursache für “Argumenttyp ByRef unverträglich”

Das Problem liegt wieder mal daran, dass VBA manche Dinge einfach anders macht, als andere Programmiersprachen
Typisches Beispiel für “Argumenttyp ByRef unverträglich”

Sub Makro1()
' "Argumenttyp ByRef unverträglich" Beispiel

Dim text, text2, text3 As String
Dim b1, b2 As Boolean

b1 = True
b2 = False
text3 = make_something(text, text2, b1, b2)

End Sub

Private Function make_something(text As String, text2 As String, b1 As Boolean, b2 As Boolean)

text = text & text2

If b1 = True Then
b1 = False
Else
b1 = True
End If

If b2 = True Then
b2 = False
Else
b1 = True
End If

make_something = text

End Function

In Zeile 9 tritt der Fehler auf. Aber warum, die Variablentyen passen doch?

[the_ad id=”1421″]

Der Fehler liegt in Zeile 4 und 5.
Die Variablen text, text2, text3 wurden nur vermeindlich als String deklariert!
In Wirklichkeit ist ist nur text3 ein String. text, text2 sind vom Typ Variant.

Für VBA sieht Zeile 4 wie folgt aus:
Dim text As Variant, text2 As Variant, text3 As String
und nicht als
Dim text As String, text2 As String, text3 As String

Fazit und Best Practice:

  1. Jede Variable in einer Zeile deklarieren.
  2. Jeder Variable explizit einen Datentyp zuweisen.
  3. Variablen nicht wie in anderen Sprachen mit Komma trennen
  4. Wundern, warum das Auto-Complete z.B. in 8 geht und in Zeile 7 nicht.

Ich hoffe dieser kleine Tipp hilft einigen bei der teils frustrierenden Frage, warum der Argumenttyp ByRef manchmal unverträglich ist.

[the_ad id=”1419″]

16 Kommentare
  1. Matthias Staud
    Matthias Staud sagte:

    Endlich hat es Klick gemacht! Da ich aus der Java-Welt komme, habe ich immer einzeilig deklariert – jetzt ist auch klar warum ich mir immer nur mit den Einklammerungen behelfen konnte! Danke für Deinen wertvollen Beitrag!

    Herzliche Grüße

    Matthias

    Antworten
  2. frau a
    frau a sagte:

    Auch von mir herzlichen Dank, ich bin auch fast verzweifelt. Interessanterweise hatte ich in meinem Test-Sub vor dem Aufruf der Funktion eine Abfrage des Datentyps vorgenommen und den korrekten, also den zuvor vermeintlich deklarierten und von der Funktion benötigten, Datentyp genannt bekommen. Sehr Seltsam.

    Antworten
  3. Jean-Pierre
    Jean-Pierre sagte:

    Haha, mir auch! Hatte das gleiche Problem schon mal früher, aber die Lösung wieder vergessen. Wer denkt sich auch sowas aus… klar, Microsoft.
    Also vielen lieben Dank!

    Antworten
  4. Andre Fischer
    Andre Fischer sagte:

    Hallo Hagen,
    war genau mein Problem! Danke schön! Cool wärs, wenn du der Hagen bist, der einen Andre Fischer aus alten Tagen kennt! 🙂

    Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar zu Denis Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert