2017-01-09 125 views
1

我使用的是VBA中的舊Excel文檔,它可以在Windows 7上與IE 11一起使用,但是在Windows 10上的IE 11上它不起作用。 IE 11啓動到請求的URL,但就是這樣。任何時候我嘗試訪問事件,方法或屬性時,它都會停止。沒有錯誤代碼,沒有崩潰,只是停止。VBA InternetExplorer.Application對象掛起

我已經證實了我對的Microsoft Internet引用控制Microsoft HTML對象庫包括(他們不是,但他們現在)。

Dim ie As Object 

If ie Is Nothing Then 
    Set ie = CreateObject("InternetExplorer.Application") 
    ie.Visible = True 
End If 

url = "www.myurl.com" 

ie.Navigate url 

While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend 

代碼下面的檢查從不執行,我把MsgBox代碼放在測試前後。只有MsgBox在循環工作之前,除非我嘗試使用MsgBox ie.Document.Title,但我可以做MsgBox ie.ReadyStateMsgBox "Loading webpage"就好。

再次,代碼工作完全正常,但在IE 11的Windows 7上沒有問題,但在IE 11的Windows 10上無法正常工作。在多臺W7和W10機器上測試,結果相同。

+2

當您在Windows 10中手動打開IE 11時,是否有任何消息框會自動出現?例如「使這個默認瀏覽器」等 – Jordan

+1

在循環中,你的意思是'while ie.ReadyState <> 4或ie.Busy:DoEvents:Wend'?這是正常的,試圖在這個循環之前獲得'ie.Document.Title'將不起作用,因爲文檔尚未完全加載,並且標題將失敗。它如何「停止」?你的意思是它卡在循環中?嘗試使用F8逐步完成代碼。檢查ie.ReadyState值是什麼。 –

+0

嘗試循環'Do:Debug.Print TypeName(ie):DoEvents:Loop While ie.ReadyState <> 4或ie.Busy',並顯示輸出。 – omegastripes

回答

0

嘗試了很多不同的選項後,我終於能夠得到它的工作。根據OmegaStripes的建議,我開始搞兼容模式。像許多事情一樣,最簡單的解決方案最終成爲正確的解決方案。將我的Intranet站點添加到兼容性視圖設置後,它對VBA的零代碼更改非常完美。

  1. 啓動IE 11
  2. 點擊工具
  3. 點擊兼容性視圖設置
  4. 鍵入URL到文本框,並單擊添加
  5. 檢查顯示Intranet站點在兼容模式下
  6. 點擊關閉

這樣做我退出IE 11之後,重新啓動我的Excel試算表與以前沒有發揮作用的VBA。執行VBA代碼,它的工作方式與使用IE 11的Windows 7一樣。

希望這可以幫助其他人併爲他們節省很多頭痛。

特別感謝OmegaStripes堅持通過這與我和幫助我看到的實際問題,而不是過度思考它。