0

我有一个需要通过 API 调用解析的 100,000 个 URL 的列表。我已将它们分类成一个包含 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
4

1 回答 1

0

您可能很久以前就解决了自己的问题,但是由于问题仍然存在,我将试一试。

我假设意图是 B1 最初为 1,然后在处理每一行后步进。这将允许您停止宏并从上次运行的位置继续。

但是您不要那样使用 B1 或 lURLArrayCount 。您检查的范围始终是 A1 到 Amax。您步进 lURLArrayCount 并将其存储在 B1 中,但其值未在循环中使用。

您将 sURLArray 设置在循环之外,但在内部使用它。

循环是For Each rngArrayCell,但你从不使用 rngArrayCell。

添加结果后,您无需执行 lDataSetLastRow。

于 2011-12-22T23:24:04.383 回答