IEオブジェクトが完全に読み込まれていない可能性があります。つまり、 "I"変数が値を取得できない可能性があります。 あなたは事前に検証を追加してみてください:何かをペーストしようとしていると、アプリケーションがそうする準備ができていなかったことを見つけるとき、私はVBAと同様の問題を持っていた
Do While IE.busy
DoEvents
Loop
。
がmilissecondsのためのあなたのモジュールの先頭で定数を宣言します:
Const ms As Double = 0.000000011574
次に、あなたのニーズのためにこれを適応してみてください:
私を助けた何かが、これに類似したタスクを実行するための関数を作成しました。
Function Try_Something() as Boolean
On Error GoTo errorHandler
Application.Wait Now + ms * 50
'Do something here, such as checking if the value is obtainable'
var = InStr(html_document.body.innerHTML, "EPG")
Try_Something = True
Exit Function
errorHandler:
Try_Something = False
End Function
この機能は実行時エラーをカプセル化し、連続した試行間に50msの遅延を追加します。通常、コードをスムーズに実行するのに十分です。あなたは、ページが実際にロードされたことを確認するためにREADYSTATE
列挙体を使用して最高だ
Do until Try_Something = True
DoEvents
Loop
I = InStr(html_document.body.innerHTML, "EPG")
html_documentを取得する前にページが読み込まれるのを待っていますか?例えば'IE.Navigate'を使った後、Do While IE.ReadyState <> 4:DoEvents:Loop'のようなことをする必要があります – Jordan