即忙不工作[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]的主要内容,如果未能解决你的问题,请参考以下文章

每天有做不完的工作

用vba新建工作表,并命名

vba 指定工作簿,工作表,单元格

VBA 工作薄中所有工作表怎么用代码表示

vba 打开固定地址下,指定名称的工作簿

vba实现跨工作簿之间单元格录入数据的方法