this postが見つかりました。私は受け入れられた答えによって提案された解決策を試し、次のコードを考え出しました。VBAのWebスクレイピングでランタイムエラーが発生しました
Sub WebScraping()
Dim appIE As Object
Dim myValue As String
Dim iLastRow As Integer
Dim allRowOfData
Application.DisplayAlerts = False
Set appIE = CreateObject("internetexplorer.application")
With appIE
.Navigate "http://uk.investing.com/rates-bonds/financial-futures"
.Visible = False
End With
Do While appIE.Busy
DoEvents
Loop
'Set allRowOfData = appIE.document.getElementById("pair_8907")
Worksheets("Web Scraping").Activate
'myValue = allRowOfData.Cells(7).innerHTML
myValue = appIE.document.getElementById("pair_8907").Cells(7).innerHTML
iLastRow = ActiveSheet.Range("B100000").End(xlUp).Row
ActiveSheet.Cells(iLastRow, 1).Select
If iLastRow = 1 Then
ActiveCell.Offset(1, 0).Value = "US 30Y T-Bond"
ActiveCell.Offset(1, 1).Value = myValue
ActiveCell.Offset(1, 2).Value = Now()
ActiveCell.Offset(1, 2).Select
ElseIf iLastRow > 1 Then
ActiveCell.Copy Destination:=Cells(ActiveCell.Row + 1, 1)
ActiveCell.Offset(1, 1).Value = myValue
ActiveCell.Offset(1, 2).Value = Now()
ActiveCell.Offset(1, 2).Select
End If
appIE.Quit
Set appIE = Nothing
Set allRowOfData = Nothing
End Sub
私のスクリプトは10回のうち、スムーズ9実行されますが、時には、それはエラーがスローされます。
ことが起こるとVBEのデバッガコマンドは、私が思う
myValue = appIE.document.getElementById("pair_8907").Cells(7).innerHTML
おそらく、エラー処理を行うと便利です。ウェブサイトの読み込みが完了したとすると、appIEはもうビジーではなく、ウェブサイトが完全に読み込まれていないことを意味します(例えば、インターネット接続のエラーなど)。おそらくその瞬間にID「pair_8907」の要素がないため、.Cells(7).innerHTMLがエラーをスローする可能性があります。 いつも安全にするためには、一度のすべての掻き取りを確認してください - しばらくすると有効な文書がありますか? - 指定されたIDを持つ要素をドキュメントに持っていますか? - この要素が8個ありますか? – DaDirnbocher