2016-04-26 22 views
0

Ich habe eine API-URL, um ein einfaches Ergebnis in JSON {"visit":"0","sales":"0"} zu erhalten.VBA-Code zum Extrahieren der API-URL-Ergebnisse in Excel

Das Problem ist, dass die URL nur für 1 Parameter gleichzeitig funktioniert und ich Hunderte von Einträgen zuordnen muss.

Im Folgenden finden Sie die URL

http://<Website>/lms/lmsapi.php?mobileno=<10digits-mobileNumber>&leaddate=<yyyy-mm-dd> 

Ich muss nur die Werte zwischen "<>".

Ich habe die Excel-Datei mit allen Einträgen fertig und jeder neue Eintrag erstellt eine benutzerdefinierte URL, die die oben genannten Werte ersetzt.

Ich brauche eine VBA script, um das Ergebnis in der Datei Excel in der Zelle neben dem Eintrag zu erhalten.

+0

Welche Art von API verwenden Sie REST? Möchten Sie den Besuch und den Verkauf in verschiedenen Zellen oder in derselben Zelle durchführen? –

+0

Ich bin mir nicht sicher über den API-Typ, da die URL von einem meiner Geschäftskunden vergeben wird. Ergebnisse in verschiedenen Zellen wären hilfreich, können aber auch mit demselben Zelleneintrag arbeiten. –

+0

Ich benutze WEBSERVICE Formel für jetzt, aber das Problem ist, dass das Ergebnis in #VALUE nach automatischer Neuberechnung alle paar Minuten ändert und ich die Formel manuell erneut verarbeiten muss. –

Antwort

0
Sub XMLHttpTest() 

    ' Dim Variables 
    Dim XMLHttp  As Object 
    Dim ApiUrl  As String, ApiRequestType As String, ApiUser As String 
    Dim ApiPwd  As String 
    Dim bolAsync As Boolean 
    Dim ApiMsg     ' <----mostly for Post 
    Dim r   As Range 

    'create Microsoft XML HTTP Objekt 
    Set XMLHttp = CreateObject("MSXML2.XMLHTTP") 
    'Set ScriptControl for parsing JSON 
    Set ScriptControl = CreateObject("ScriptControl"): ScriptControl.Language = "JScript" 


    'Loop through every Used Cell in A 
    With ActiveSheet 
     For Each r In Intersect(.Range("a:a"), .UsedRange) ' <- i assume your urls are saved in column A if not change a:a to whatever you need 

      ' Add the parameters for our request 
      ApiRequestType = "GET" 
      ApiUrl = r.Value 
      bolAsync = False 
      ApiUser = "" 
      ApiPwd = "" 
      ApiMsg = "" 

     ' execute Request 
      Call XMLHttp.Open(ApiRequestType, ApiUrl, bolAsync, ApiUser, ApiPwd) 
      Call XMLHttp.send(ApiMsg) 
      MsgBox XMLHttp.responseText 
      If XMLHttp.Status <> 200 Then 
       MsgBox "The Request returned " & XMLHttp.Status & XMLHttp.statusText 

      Else 
       Set jsonDecode = ScriptControl.Eval("(" + XMLHttp.responseText + ")") 
       Cells(r.Row, r.Column + 1).Value = jsonDecode.visit 
       Cells(r.Row, r.Column + 2).Value = jsonDecode.sales 
      End If 


     Next 
    End With 

    MsgBox "Request successfull." 

End Sub 

Sry, dass es so lange dauerte, aber ich hatte einige geschäftige Tage. Ich denke, der obige Code sollte Ihr Problem lösen. Seien Sie sicher, dass es nur auf apis da Sie vertrauen verwenden die Scriptbefehle JAVA nehmen und führen sie, dass so im Auge behalten Wenn Sie andere Statusmeldungen zu übernehmen wollen, dann

If XMLHttp.Status <> 200 

ändern 200 nur an Ihre Bedürfnisse anzupassen

+0

Danke! Werde es heute versuchen! –

+0

Fehler erhalten "Laufzeitfehler '-2147467259 (80004005)': Methode 'open' des Objekts 'IXMLHTTPRequest' fehlgeschlagen" –

+0

Welche Parameter sind zu öffnen() –

Verwandte Themen