0

API 呼び出しを介して解析する必要がある 100,000 個の URL のリストがあります。それらを 600 以上の連結された文字列のリストに並べ替えました。各文字列には 200 の URL が含まれており、解析する準備ができています。

以下のコードを記述してプロセスをループし、返された URL に関する情報を列 C の最後の行に 1 つずつ配置します。しかし、私のループは壊れているようで、理由はわかりません (あまりにも長い間見ている) が、それは初歩的なミスだと思われます。最初の 2 つの連結文字列 (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 に答える