2017-06-26 3 views
0

Ich versuche, eine Web-API mit VBa abzufragen.Typ Mismatch beim Setzen eines Objekts

Das Problem, das ich habe, ist das Rückergebnis diese Ausnahme

wirft

Type Mismatch

Dies geschieht, wenn ich die getJSON Funktion verlassen (siehe unten)

Function StartOfCode() 
'...code 
Dim jsonResult As Object 
Set jsonResults = getJson(query) 'cannot get past this 
'... more code 
End Function 


Function getJson(ByRef query As String) As Object 

Dim MyRequest As Object 
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 

    With MyRequest 
     .Open "GET", query 
     .setRequestHeader "Content-Type", "application/json" 
     .setRequestHeader "Accept", "application/json" 
     .send   
    End With 

Set getJson = DecodeJson(MyRequest.ResponseText) ' returns fine and I can see the object, of type Object/JScript/TypeInfo 

Set MyRequest = Nothing 

End Function 

Function DecodeJson(JsonString As Variant) As Object 
    Set DecodeJson = m_ScriptEngine.Eval("(" + JsonString + ")") 
End Function 

I verstehe nicht, was ich hier falsch gemacht habe

+0

Könnten Sie den Code für DecodeJson veröffentlichen? –

+0

Oooops, aktualisiert, sorry @BrianMStafford – MyDaftQuestions

+0

Ich würde versuchen, in den Rückgabetypen Ihrer Funktionen explizit zu sein. In diesem Fall stellen Sie mit Ihren Funktionen das Objekt zurück. –

Antwort

1

Das Problem ist mit der Objektdeklaration:

Dim jsonResult As Object Set jsonResults = getJson(query)

Sie erklärt hat, ein Objekt namens jsonResult aber in der nächsten Zeile Sie die Pluralform des varibable Namen verwenden: jsonResults. Sie müssen also einen dieser Variablennamen ändern, damit sie übereinstimmen.

+0

.... Ich wundere mich, warum "Option explizit" dies nicht abholt ... – MyDaftQuestions

+1

@MyDaftQuestions Weil Sie eine globale Variable 'jsonResults' haben? – GSerg