Excel 2003 VBA代码在逐步执行时工作,但在完全运行时不起作用
问题描述:
我找到并修改了Excel VBA代码以打开网页并打开链接文件。Excel 2003 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
答
警告 - 我不知道是什么给你的代码出去到现实世界打开一个网页,你的代码
接着做了这番解释,我猜的区别成功与失败之间的关系与time
有关。
IE当你逐步了解代码时,事情会被给予足够的时间来完成,这样当单击链接的代码运行时,所有事情都会完美设置,因此一切正常。
但是,当您全速运行时,在幕后发生的事情不够快,所以当代码点击它时,链接还没有准备好(或存在)。我不知道为什么会出现这种情况,但考虑到像AJAX这样的东西可以异步加载网页,我的网页并不会立即变成现实。
这类事情被称为Race Condition
(代码的多个部分正在比赛,看看谁先到那里),解决方案是找出如何阻止这种情况发生。这可能意味着找到某种表示网页100%确实真正加载(最好的情况)的状态,或者像在延迟时间在临界点放置时间一样,可以比最坏情况下的安装时间长99.999%这是非常糟糕的,并且可能导致在以后诊断错误时可怕,当你达到0.0001%的情况时 - 正如你知道你已经用你的延迟修复了竞争状况)
答
尝试使用DoEvents这将停止运行后台进程完成。这可能帮助ü解决您的问题
问候 Umesh制作
你的代码工作正常。我刚刚更新了网址,并改变了'InnerText'。 –