Сбой VBA с циклом запросов xmlhttp - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь переписать этот макрос из ie.application на запросы http в VBA.Макрос переходит к URL, получает HTML, затем анализирует и очищает необходимые данные.

Он хорошо работает с одним запросом, но когда я пытаюсь сделать это с циклом FOR с тысячами URL, происходит сбой Excel.

Я думаю, что я должен каким-то образом "закрыть" соединение, прежде чем перейти к следующему циклу, но я не нашел решения.

Вот мой код:

Sub GetQuotes()
    Dim xmlhttp As New MSXML2.XMLHTTP60, myurl As String
    Dim html As New HTMLDocument


    For r = 1 To 10

'*****GO TO PRODUCT PAGE*****
        path= ThisWorkbook.Worksheets("Sheet1").Cells(r, 1).Value
        myurl = "https://some_domain.com" + path

        xmlhttp.Open "GET", myurl, False
        xmlhttp.send
        html.body.innerHTML = xmlhttp.responseText



'*****GET PRICE*****
        If Not html.getElementById("some_id") Is Nothing Then
            price = html.getElementById("some_id").innerHTML
            ThisWorkbook.Worksheets("sheet1").Cells(r, 2).Value = price
        Else
            price = "empty"
            ThisWorkbook.Worksheets("sheet1").Cells(r, 2).Value = price
        End If

        Next r

    End Sub

Активны ссылки на XML и HTML

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Это сработало:

Задание с DoEvents внутри сразу после отправки запроса.

A DoEvents отдельно перед следующим вызовом.

Использование одного изтолько их, не сработало.

0 голосов
/ 14 декабря 2018

Сожмите в

Do While xmlhttp.ReadyState <> 4
    DoEvents
Loop

после отправки.Ваш текущий код будет запускать все запросы почти сразу.При этом вы будете ждать загрузки страницы, прежде чем продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...