我找到并修改了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
答案 0 :(得分:1)
警告 - 我不知道你的代码是怎么回事
有了这个警告,鉴于您的代码进入现实世界以打开网页,我猜测成功与失败之间的区别与time
有关。
IE当您逐步完成代码时,事情会有足够的时间来完成,这样当点击链接的代码运行时,一切都完美设置,所以一切正常。
但是当你以全速运行时,在幕后不会发生足够快的事情,因此当你的代码点击它时,链接还没有准备好(或存在)。我不知道为什么会这样,但考虑到像AJAX这样的东西可以异步加载网页,我的网页不会立即生动,我不会感到惊讶。
这种事情被称为Race Condition
(代码的多个部分正在竞争,看谁先到达那里),解决方案是弄清楚如何阻止这种情况发生。这可能意味着找到一些状态,表示网页是100%真正真正加载的(最好的情况),或者愚蠢到在关键点设置时间延迟,允许比最坏情况设置时间长99.999%(这真的很糟糕,当你达到0.0001%的情况时,可能会导致很难诊断错误 - 因为你知道你已经用你的延迟修复了比赛条件了)
答案 1 :(得分:1)
尝试使用DoEvents,这将阻止excel运行,直到后台进程完成。这可能有助于您解决问题
此致 Umesh制作