Excel VBA: петельные веб-запросы

У меня есть список из 100 000 URL-адресов, которые мне нужно проанализировать с помощью вызова API. Я отсортировал их в список из 600+ объединенных строк, каждая из которых содержит 200 URL-адресов - готовых для анализа.

Я написал код ниже для зацикливания процесса, помещая возвращенную информацию об URL-адресах в последнюю строку столбца C, по одному за раз. Тем не менее, моя петля, кажется, сломана, и я не знаю почему (глядя на это слишком долго), но я подозреваю, что это ошибка новичка. После выполнения первых двух сцепленных строк (400 URL-адресов, он начинает перезаписывать информацию со строки 200, обрабатывая только первую строку.

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

Sub APIDataProcess()

    Dim lURLsLastRow As Long
    Dim lDataSetLastRow As Long
    Dim rngURLDataSet As Range
    Dim sURLArray As String
    Dim lURLArrayCount As Long
    Dim rngArrayCell As Range

    lURLsLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    lDataSetLastRow = Cells(Rows.Count, 3).End(xlUp).Row

    Set rngURLDataSet = Range("A1:A" & lDataSetLastRow)

    lURLArrayCount = Range("B1").Value ' placeholder for count increments
    sURLArray = Range("A" & lsURLArrayCount).Value


    For Each rngArrayCell In rngURLDataSet

        If lsURLArrayCount <= lURLsLastRow Then
            With ActiveSheet.QueryTables.Add(Connection:="URL;http://test.test.org/test.php", Destination:=Range("C" & lDataSetLastRow))
                .PostText = "urls=" & sURLArray
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .BackgroundQuery = False
                .RefreshStyle = xlOverwriteCells
                .SavePassword = False
                .SaveData = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .WebSelectionType = xlEntirePage
                .WebFormatting = xlWebFormattingNone
                .WebPreFormattedTextToColumns = True
                .WebConsecutiveDelimitersAsOne = True
                .WebSingleBlockTextImport = False
                .WebDisableDateRecognition = False
                .WebDisableRedirections = False
                .Refresh BackgroundQuery:=False
            End With
            lURLArrayCount = lURLArrayCount + 1
            Range("B1").Value = lURLArrayCount

            Application.Wait Now + TimeValue("00:01:00")

        Else
            Exit Sub

        End If

    Next rngArrayCell

End Sub

1 ответ

Вы, наверное, уже давно решили свою проблему, но поскольку вопрос все еще открыт, я пойду.

Я предполагаю, что изначально B1 равен 1, а затем обрабатывается после каждой строки. Это позволит вам остановить макрос и продолжить с того места, куда вы попали в предыдущем цикле.

Но вы не используете B1 или lURLArrayCount, как это. Диапазон, который вы исследуете, всегда от A1 до Amax. Вы выполняете шаг lURLArrayCount и сохраняете его в B1, но его значение не используется в цикле.

Вы устанавливаете sURLArray вне цикла, но используете его внутри.

Цикл For Each rngArrayCell но вы никогда не используете rngArrayCell.

Вы не выполняете шаг lDataSetLastRow после добавления результата.

Другие вопросы по тегам