2016-04-26 4 views
0

У меня есть URL-адрес API, чтобы получить простой результат в JSON {"visit":"0","sales":"0"}.Код VBA для извлечения результата API API в Excel

Проблема заключается в том, что URL-адрес работает только по 1 параметру за один раз, и у меня есть сотни записей для сопоставления.

Ниже URL

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

мне просто нужно изменить значения между "<>".

У меня есть файл excel, готовый со всеми записями, и любая новая запись создаст собственный URL-адрес, заменяющий вышеуказанные значения.

Мне нужен VBA script, чтобы получить результат в файле Excel в ячейке, прилегающей к записи.

+0

Какой API вы используете REST? вам нужен результат посещения и продаж в разных ячейках или в одной и той же ячейке. –

+0

Я не уверен в отношении типа API, поскольку URL-адрес предоставляется одним из моих бизнес-клиентов. Результаты в разных ячейках были бы полезны, но также могут работать с одной и той же ячейкой. –

+0

Я использую формулу WEBSERVICE, но проблема заключается в том, что результат автоматически изменяется на #VALUE после автоматического пересчета за каждые несколько минут, и мне приходится вручную вручную обрабатывать формулу. –

ответ

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, что это заняло так много времени, но у меня были напряженные дни. Я думаю, что приведенный выше код должен решить вашу проблему. Обязательно используйте его только на APIs вы доверяете, так как ScriptControl может принимать команды JAVA и выполнять их так что имейте это в виду Если вы хотите принять другие сообщения о состоянии, то 200 раз изменить

If XMLHttp.Status <> 200 

в соответствии с вашими потребностями

+0

Спасибо! Попробуй сегодня! –

+0

ошибка «Ошибка выполнения» -2147467259 (80004005) ': метод' open 'объекта' IXMLHTTPRequest 'failed " –

+0

Какие параметры даны для open() –