即忙不工作[VBA]
Posted
技术标签:
【中文标题】即忙不工作[VBA]【英文标题】:ie.busy not working well [VBA] 【发布时间】:2013-10-12 13:44:28 【问题描述】:我正在使用:
While ie.busy
DoEvents
Wend
' Some Code
在我的代码中添加暂停,同时 Internet Explorer 刷新。但这似乎效果不佳。 '某些代码部分过早执行并引发错误。
我也尝试过使用其他方法。例如
Errorhandler:
While ie.busy
DoEvents
Wend
On Error Goto Errorhandler
'Some Code
但即使这样也行不通,有时代码在成熟之前就被删除了。
请推荐一个可靠的替代 ie.busy
【问题讨论】:
请参阅this link,了解如何处理繁忙的等待循环。你不应该只检查.busy
,还要检查ReadyState = 4 'Complete
。
【参考方案1】:
在我们的代码中,ie.Busy(InternetExplorer.Application Object)不是很可信。以下是我们使用和工作的内容:
Enum READYSTATE
READYSTATE_UNINITIALIZED = 0
READYSTATE_LOADING = 1
READYSTATE_LOADED = 2
READYSTATE_INTERACTIVE = 3
READYSTATE_COMPLETE = 4
End Enum
Dim strUrl
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
'....
' do navigation...
'
strUrl = "http://www.example.com/"
ie.Navigate strUrl
'
' waiting for the ie complete loading:
'
Do While (ie.Busy Or ie.READYSTATE <> READYSTATE.READYSTATE_COMPLETE)
DoEvents
Loop
'
' here below you do stuffs on the new loaded URL:
'
你可以试试。
【讨论】:
这不是一个完整的答案,除非您还提供 WinAPI 睡眠功能的代码 :) @David Zemens,是的,这是一个很好的评论。我修改了答案。 如果懒得使用DLL API函数,可以评论sleep()的用法。 @David Zemens,我再次测试,忽略 Sleep() 会更加被动。所以再次修改。以上是关于即忙不工作[VBA]的主要内容,如果未能解决你的问题,请参考以下文章