0

セル値に基づいて変化する動的 URL を使用してチーム情報を抽出するコードがあります。

「オブジェクト変数またはブロック変数が設定されていません」という実行時エラー「91」が表示され続け、デバッグすると行を指します

Set tr_coll = tbl(0).getelementsbytagname("TR")

このコードは他のデータ抽出でも機能しますが、何らかの理由でこのエラーが発生しています。

Sub VS()

Dim src As Worksheet, tgt As Worksheet
Dim url As String, team1 As String
Dim team2 As String, j As Integer, row As Integer
Dim XMLHTTP As Object, html As Object
Dim tr_coll As Object, tr As Object
Dim td_coll As Object, td As Object

Set src = Sheets("Match-up")
Set tgt = Sheets("vs")
team1 = src.Range("b1")
team2 = src.Range("aa1")

    url = "http://www.premierleague.com/en-gb/matchday/matches/2015-2016/epl.past-meetings.html/" & team1 & "-vs-" & team2

    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
    XMLHTTP.Open "GET", url, False
    XMLHTTP.send

    Set html = CreateObject("htmlfile")
    html.body.innerHTML = XMLHTTP.ResponseText

    Set tbl = html.getelementsbytagname("Table")

    Set tr_coll = tbl(0).getelementsbytagname("TR")

    For Each tr In tr_coll
        j = 1
        Set td_col = tr.getelementsbytagname("TD")

        For Each td In td_col
            Cells(row + 1, j).Value = td.innerText
            j = j + 1
        Next
        row = row + 1
    Next
End Sub
4

1 に答える 1

0

これは、tbl 変数が Nothing に設定されていることを意味します。これは、期待するテーブルがない 404 ページにヒットしたことを示唆しています。

チームが有効なページを返していることを確認してください。それは私のために動作します:

url = "http://www.premierleague.com/en-gb/matchday/matches/2015-2016/epl.past-meetings.html/southampton-vs-west-ham"

ところで、td_col のスペルを 'l' と間違えています (ただし、Option Explicit を使用していないので問題ありませんが、注意してください!!)。また、明示的なオプションを使用しないため、これに影響を与えない tbl 変数を宣言しません。これは、多くの変数を宣言する必要がある場合があることを意味します。型を変更することはできませんが、多くの VBA をコーディングする予定がある場合は、このオプションをお勧めします。

F8 キーを押してコードをステップ実行し、チーム文字列が何に評価されているかを確認します。次に、結果の文字列をブラウザーにハードコードして、何が起こるかを確認します...

于 2016-02-06T00:41:56.227 に答える