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:
- Jede Variable in einer Zeile deklarieren.
- Jeder Variable explizit einen Datentyp zuweisen.
- Variablen nicht wie in anderen Sprachen mit Komma trennen
- 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″]
Danke für die Erleuchtung!
Danke … Ohne deine Tipps hätte ich mir einen Wolf gesucht!!!!
…auch nach 3 Jahren kann man diesen Tipp noch gebrauchen. Danke
Vielen Dank für Hinweis. Man lernt auch nach Jahren immer noch dazu.
MfG Hans Eckhardt
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
Sehr guter Tip.
Aber Fehler im Code:
Du rufst make_something(…) auf.
Aber die Funktion heißt bearbeite(…)
Ops… Stimmt… korrigiert… danke…
Vielen Dank, Hagen! Du hast mir heute mit dem Beitrag lange Sucherei erspart!
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.
YES! THANKS!
Danke , hat mir auch sehr geholfen noch im Jahr 2021 😉
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!
Geil, danke! Habe viel zu lange gesucht bevor ich auf diesen Artikel gestoßen bin
Unfassbar. Danke für den Hinweis, das hätte mich Jahre gekostet…
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! 🙂
Hallo Andre,
wie geht’s Dir? Ich bekomme die Kartentricks immer noch nicht hin 😀
LG
Hagen