2016-01-20 277 views
0

我一直在運行一個查詢,現在正在從網頁獲取數據。經過多次運行後,它決定停止工作,並將問題追溯到ie.document對象 - 它永遠不會返回任何內容。VBA IE.Document空錯誤

編譯我的項目時,我發現即使在導航到網頁之前,ie的「Document」元素也會返回「應用程序定義或對象定義的錯誤」的錯誤。也有一些其他的元素也返回此錯誤 - 即「狀態文本」和「類型」

該鏈接包含我的錯誤的截圖: https://www.dropbox.com/s/wcxxep8my10nu8h/vba%20ie%20document.jpg?dl=0

在不這裏工作的縮減版本的情況下我只要我得到的代碼的「設置IE =新的InternetExplorer」部分運行

Sub getCard() 

    Dim ie As InternetExplorer 
    Dim url1 As String 

    url1 = "google.com" 

    Set ie = New InternetExplorer 
    ie.Visible = True 
    ie.Navigate url1 
    WaitBrowserQuiet ie 

End Sub 

Sub WaitBrowserQuiet(objIE As InternetExplorer) 

Do While objIE.Busy Or objIE.ReadyState <> READYSTATE_COMPLETE 
    DoEvents 
Loop 

End Sub 

代碼創建即對象的時候,我看到了錯誤。如果我碰巧導航到網頁,那麼ie.document對象是空的。

我搜索了四周,並嘗試了一些事情來阻止這種情況發生 - 重新啓動我的電腦,運行「ie.quit」和「Set ie = Nothing」,重置我的Internet Explorer等...似乎沒有任何工作。

這似乎可能是一個更深層次的問題,因爲即使在導航到網頁之前我收到錯誤消息。希望有人知道如何制止錯誤。

+0

**早期綁定**會發生什麼?例如'Dim ie As New InternetExplorer' and remove the'Set ie = ...' – Jeeped

+0

不幸的是,我還是得到了同樣的錯誤 - ie對象現在在運行「ie.Visible = True」行時變得可見,並且錯誤仍然存​​在。在導航url時,即使在通過ie.busy和ie.readystate條件之後,ie.Document仍然是空白的。 – brebbles

回答

0

你的URL是URL1,嘗試改變它,或者只是把URL放在那裏。

+0

我的道歉,應該有讀取url1,我急於修剪我手動輸入的URL代碼。我在上面的問題中改變了它 - 非常感謝您指出了這一點 – brebbles

0

在你的代碼中,你在子getCard中有本地定義的對象「ie」,當這個子結束時,綁定就結束了。從私有網絡區域改爲公共網絡區域也可以刪除與該對象的綁定。我更喜歡使用全局對象appIE,然後當它遇到這樣的錯誤時,我發現錯誤(如果TypeName(appIE)=「Object」Then FindIE)並再次找到該對象:

Sub FindIE() 'Needs reference to "Microsoft Shell Controls And Automation" from VBA->Tools->References 
Dim sh 
Dim eachIE 
Dim SearchUntil 
SearchUntil = Now() + 20/24/60/60 'Allow to search for 20 seconds otherwise it interrupts search 
Do 
    Set sh = New Shell32.Shell 
    For Each eachIE In sh.Windows 
    If InStr(1, eachIE.LocationURL, ServerAddress) Then 
     Set appIE = eachIE 
     'IE.Visible = False 'This is here because in some environments, the new process defaults to Visible. 
     'Exit Do 
     End If 
    Next eachIE 
    If TypeName(appIE) <> "Object" Then 
     If InStr(1, appIE.LocationURL, ServerAddress) > 0 Or SearchUntil < Now() Then Exit Do 
    End If 
Loop 
Set eachIE = Nothing 
Set sh = Nothing 

End Sub

此代碼包含的其他人的部分來自於stackoverflow,但我忘記了代碼的一些基本部分的功勞。抱歉。