excel VBA代码在步入时有效,但在运行时无效

时间:2017-02-16 15:00:24

标签: excel vba excel-vba internet-explorer

我有以下行在运行时失败,但是当我在此行之前断开应用程序时,它运行正常。

I = InStr(html_document.body.innerHTML, "EPG")

我很长,已初始化,应该可以正常工作。 html_document是IE.document,通过

初始化
Set IE = New InternetExplorer

在此行之前设置断点使其正常工作,我会选择正确的字符位置。

在此行之后设置断点,I仍为0。

任何想法都会非常感激。

2 个答案:

答案 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")