ウェブサイトを開き、場所を選択し、HTML表をExcelシートにコピーして別の場所で繰り返すことになっているコードがあります。しかし、私は 'For'ループを実行しようとしたとき、私は4回目の繰り返しでエラーが発生しました。メッセージに「オブジェクト変数またはWithブロック変数が設定されていません」と表示されました。デバッグツールは、ライン44VBAコード - 第4ループでスタック
Sub ParseTable()
Dim IE As InternetExplorer
Dim htmldoc As MSHTML.HTMLDocument 'Document object
Dim eleColtr As MSHTML.IHTMLElementCollection 'Element collection for tr tags
Dim eleColtd As MSHTML.IHTMLElementCollection 'Element collection for td tags
Dim eleRow As MSHTML.IHTMLElement 'Row elements
Dim eleCol As MSHTML.IHTMLElement 'Column elements
Dim ieURL As String 'URL
Dim x As Integer
Dim y As String
y = "A1"
For x = 1 To 4
If x <> 2 Then 'Skip iteration 2
Set IE = New InternetExplorer
IE.Visible = True
Application.ScreenUpdating = False
ieURL = "***"
IE.navigate ieURL
'Wait
Do While IE.Busy Or IE.readyState <> 4
DoEvents
Loop
Set htmldoc = IE.document 'Document webpage
Do While IE.Busy Or IE.readyState <> 4
DoEvents
Loop
IE.document.getElementById("ddlLevel1").selectedIndex = x
IE.document.getElementById("ddlLevel1").FireEvent ("onchange")
Do While IE.Busy Or IE.readyState <> 4
DoEvents
Loop
Set eleColtr = IE.document.getElementsByTagName("tr") 'Find all tr tags
'This section populates Excel
i = 0 'start with first value in tr collection
For Each eleRow In eleColtr 'for each element in the tr collection
Set eleColtd = IE.document.getElementsByTagName("tr")(i).getElementsByTagName("td") 'get all the td elements in that specific tr
j = 0 'start with the first value in the td collection
For Each eleCol In eleColtd 'for each element in the td collection
Sheets("Sheet1").Range(y).Offset(i, j).Value = eleCol.innerText 'paste the inner text of the td element, and offset at the same time
j = j + 1 'move to next element in td collection
Next eleCol 'rinse and repeat
i = i + 1 'move to next element in td collection
Next eleRow 'rinse and repeat
Sheets("Sheet1").Range(y).Offset(i, 0).Select
y = "A" & ActiveCell.Row
IE.Quit
End If
Next x
Application.ScreenUpdating = True
End Sub
ない原因何ができるか確認してくださいで指摘しました。私はExcelシート上の最初の4箇所(マイナス2箇所)からテーブルを取得しました。私の長い非効率なコード(私は自分自身プログラマーではない)のために恩赦。私が使用するWebページにはログインが必要で機密データがありますが、可能な限り入力を提供しようとします。助けをあらかじめありがとう!
を追加
For Each eleRow In eleColtr
した後、各ループの開始時に遅延を追加したい試行
の数にNTERは 'J = 0 'を言います。あれは正しいですか? – YowE3K
私はエラーがここにあると思います: 'IE.document.getElementsByTagName(" tr ")(i).getElementsByTagName(" td ")'。おそらくあなたはこの "tr"の中に "td"を取得しようとしていますが、 "tr"そのものはある時点でNothingです。エラーが発生する前に実行を停止し、変数を分析する必要があることを確認してください。 – mathiasfk
他にもいくつかの可能性があります[ここ](https://msdn.microsoft.com/en-us/library/5szkzs17.aspx) – mathiasfk