Ich habe die folgenden zwei Methoden:Passing Variante Array-Methode erzeugt „Type Mismatch“ Fehler
Sub Start()
Dim x As Dictionary
Set x = New Dictionary
Call x.Add("first", 1)
MsgBox TypeName(x.Items) 'Displays "Variant()"
Call Test(x.Items)
End Sub
Sub Test(withArray() As Variant)
End Sub
Mein Projekt verweist auf „Microsoft Scripting Runtime“ die Dictionary
Klasse oben verwendet bereitzustellen. Trotz der Tatsache, dass x.Items
gibt eine Variant()
(wie von MsgBox TypeName(x.Items)
gezeigt, erhalte ich den folgenden Compiler-Fehler auf Call Test(x.Items)
:
Typenkonflikt: Array oder benutzerdefinierter Typ
erwartete Was ist falsch ?
Hinweis: wenn ich ändern, um die Test
Methode:
Sub Test(withArray)
MsgBox TypeName(withArray)
End Sub
Es ist erfolgreich und zeigt Variant()
an. Warum kann ich das Argument nicht explizit als Variant()
Typ deklarieren?
Nizza Frage und schön [Tipp] (http://stackoverflow.com/questions/1537819/byref-and-byval-in-vbscript) @mehow. Ich benutze immer 'Call', weil ich auf einen Blick erkennen kann, dass eine Routine aufgerufen wird. Und auch, weil die Argumentliste in Klammern eingeschlossen sein muss (das Aufrufen einer Routine mit vielen Argumenten ohne Klammern und Kommas ist einfach zu seltsam für meine Augen). Jetzt kenne ich alle Gründe hinter der Klammer, danke! – feelthhis
Ich stimme zu, große Frage und gute Antwort. Ich gebe das ein Kopfgeld in 2 Tagen –
ja, wo du @mehow :) –