我有以下行在运行时失败,但是当我在此行之前断开应用程序时,它运行正常。
I = InStr(html_document.body.innerHTML, "EPG")
我很长,已初始化,应该可以正常工作。 html_document是IE.document,通过
初始化Set IE = New InternetExplorer
在此行之前设置断点使其正常工作,我会选择正确的字符位置。
在此行之后设置断点,I
仍为0。
任何想法都会非常感激。
答案 0 :(得分:2)
您最好使用READYSTATE
枚举来检查网页是否已实际加载。
'READYSTATE_UNINITIALIZED = 0
'READYSTATE_LOADING = 1
'READYSTATE_LOADED = 2
'READYSTATE_INTERACTIVE = 3
'READYSTATE_COMPLETE = 4
Dim IE As New InternetExplorer
'// your other code here
IE.Navigate "http://www.google.co.uk"
While IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
'// Following code will only run once the document has completely loaded.
Set html_document = IE.Document
I = InStr(html_document.body.innerHTML, "EPG")
'// rest of your code here....
答案 1 :(得分:0)
嗯,你的IE对象可能没有完全加载,这意味着你的&#34;我&#34;变量将无法获得值。 您可以尝试事先添加验证:
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")