2014-01-21 49 views
2

我找到並修改了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 
+0

你的代碼工作正常。我剛剛更新了網址,並改變了'InnerText'。 –

回答

1

警告 - 我不知道是什麼給你的代碼出去到現實世界打開一個網頁,你的代碼

接着做了這番解釋,我猜的區別成功與失敗之間的關係與time有關。

IE當你逐步瞭解代碼時,事情會被給予足夠的時間來完成,這樣當單擊鏈接的代碼運行時,所有事情都會完美設置,因此一切正常。

但是,當您全速運行時,在幕後發生的事情不夠快,所以當代碼點擊它時,鏈接還沒有準備好(或存在)。我不知道爲什麼會出現這種情況,但考慮到像AJAX這樣的東西可以異步加載網頁,我的網頁並不會立即變成現實。

這類事情被稱爲Race Condition(代碼的多個部分正在比賽,看看誰先到那裏),解決方案是找出如何阻止這種情況發生。這可能意味着找到某種表示網頁100%確實真正加載(最好的情況)的狀態,或者像在延遲時間在臨界點放置時間一樣,可以比最壞情況下的安裝時間長99.999%這是非常糟糕的,並且可能導致在以後診斷錯誤時可怕,當你達到0.0001%的情況時 - 正如你知道你已經用你的延遲修復了競爭狀況)

1

嘗試使用DoEvents這將停止運行後臺進程完成。這可能幫助ü解決您的問題

問候 Umesh製作

相關問題