嗯,有可能你的IE对象没有完全加载,这意味着你的“I”变量将无法获得一个值。 你可以尝试先添加一个验证:
Do While IE.busy
DoEvents
Loop
试图粘贴的东西,找出该应用程序还没有准备好这样做时,我也有过类似的问题与VBA。东西帮我正在创造一个函数来执行类似这样的任务:
在您的模块的开头声明一个常数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
这个函数的作用是封装运行时错误,如果发生错误,并在连续尝试之间增加50 ms的延迟,通常足以使您的代码顺利运行。在此之后,你原来的代码看起来有点像:
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