嗯,有可能你的IE對象沒有完全加載,這意味着你的「I」變量將無法獲得一個值。 你可以嘗試先添加一個驗證:
Do While IE.busy
DoEvents
Loop
試圖粘貼的東西,找出該應用程序還沒有準備好這樣做時,我也有過類似的問題與VBA。東西幫我正在創造一個函數來執行類似這樣的任務:
在您的模塊的開頭聲明一個常數milisseconds:
Const ms As Double = 0.000000011574
然後嘗試適應這爲您的需求:
Function Try_Something() as Boolean
On Error GoTo errorHandler
Application.Wait Now + ms * 50
'Do something here, such as checking if the value is obtainable'
var = InStr(html_document.body.innerHTML, "EPG")
Try_Something = True
Exit Function
errorHandler:
Try_Something = False
End Function
這個函數的作用是封裝運行時錯誤,如果發生錯誤,並在連續嘗試之間增加50 ms的延遲,通常足以使您的代碼順利運行。在此之後,你原來的代碼看起來有點像:
Do until Try_Something = True
DoEvents
Loop
I = InStr(html_document.body.innerHTML, "EPG")
在獲取html_document之前是否在等待頁面加載?例如在使用'IE.Navigate'後,你需要做一些事情,比如'Do While IE.ReadyState <> 4:DoEvents:Loop' – Jordan