Excel 2003 VBA代码在单步执行时有效,但在完全运行时无效

时间:2014-01-21 14:45:16

标签: excel vba

我找到并修改了Excel VBA代码以打开网页,然后打开链接文件。

当我单步执行它时它会起作用,但当它完全运行时它不会打开文件。

Sub CallWebPage()

Dim URL As String
Dim ieApp As Object
Dim ieDoc As Object
Dim ieForm As Object
Dim ieObj As Object
Dim objColl As Collection

URL = "http://sdrk3020v/mi_toolbox/default.asp?query_name=spBUS_GCR_AllSchemes&app_id=2&FileType=csv&btnRunQuery=Run+query"

Set ieApp = CreateObject("InternetExplorer.Application")
ieApp.Visible = True
ieApp.navigate URL

While ieApp.Busy
    'wait...
Wend

Set ieDoc = ieApp.Document
For Each ele In ieApp.Document.getelementsbytagname("a")

    If ele.innertext = "query_1" Then
        DoEvents
        ele.Click
    End If
Next

ieApp.Quit
End Sub

2 个答案:

答案 0 :(得分:1)

警告 - 我不知道你的代码是怎么回事

有了这个警告,鉴于您的代码进入现实世界以打开网页,我猜测成功与失败之间的区别与time有关。

IE当您逐步完成代码时,事情会有足够的时间来完成,这样当点击链接的代码运行时,一切都完美设置,所以一切正常。

但是当你以全速运行时,在幕后不会发生足够快的事情,因此当你的代码点击它时,链接还没有准备好(或存在)。我不知道为什么会这样,但考虑到像AJAX这样的东西可以异步加载网页,我的网页不会立即生动,我不会感到惊讶。

这种事情被称为Race Condition(代码的多个部分正在竞争,看谁先到达那里),解决方案是弄清楚如何阻止这种情况发生。这可能意味着找到一些状态,表示网页是100%真正真正加载的(最好的情况),或者愚蠢到在关键点设置时间延迟,允许比最坏情况设置时间长99.999%(这真的很糟糕,当你达到0.0001%的情况时,可能会导致很难诊断错误 - 因为你知道你已经用你的延迟修复了比赛条件了)

答案 1 :(得分:1)

尝试使用DoEvents,这将阻止excel运行,直到后台进程完成。这可能有助于您解决问题

此致 Umesh制作