【发布时间】:2017-05-24 00:17:45
【问题描述】:
我正在使用带有 VBA 的旧 Excel 文档,该文档在 Windows 7 上的 IE 11 上运行良好,但在 Windows 10 上的 IE 11 上它不起作用。 IE 11 会启动到请求的 URL,仅此而已。每当我尝试访问事件、方法或属性时,它都会停止。没有错误代码,没有崩溃,只是停止。
我已确认我对 Microsoft Internet Controls 和 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.ReadyState 或 MsgBox "Loading webpage" 就好了。
再次,代码在带有 IE 11 的 Windows 7 上运行良好,没有问题,但在带有 IE 11 的 Windows 10 上无法运行。在多台 W7 和 W10 机器上测试,结果相同。
【问题讨论】:
-
在 Windows 10 中手动打开 IE 11 时,是否有任何自动出现的消息框?例如“将其设为您的默认浏览器”等
-
循环是指
While ie.ReadyState <> 4 Or ie.Busy: DoEvents: Wend吗?在此循环之前尝试获取ie.Document.Title是正常的,因为文档尚未完全加载并且获取其标题将失败。它是如何“停止”的?你的意思是它卡在循环中了吗?尝试使用 F8 单步执行代码。检查 ie.ReadyState 值是什么。 -
尝试将鼠标悬停在 ie.readystate 上以查看其值或在 VB 编辑器中使用 ctrl+G,输入:
?ie.readystate并按 ENTER 确认。到底IE不是最可靠的东西。我曾经不得不将宏从ie.ReadyState <> 4更改为ie.ReadyState <3,网站没有完全加载但足以让我获取数据。问题的原因是某些 Google Ads 无法正确加载。 -
@defaultNINJA Object TypeName 表示 IE ActiveX 对象已断开连接,在某些 IE 无法稳定运行的网站上检测到此类问题。看看this answer。
-
@defaultNINJA 能否请您分享 URL 以及加载文档后要执行哪些操作?
标签: excel vba internet-explorer windows-10