我目前正在使用Office 2010、Visual Basic for Applications 7和Internet Explorer 9。
我目前遇到的问题是,在我们的intranet上使用IE对象似乎失败了,我想知道是否有解决方案。
功能代码:
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://www.google.com"
WaitUntilReady IE
'Application.Wait (Now + TimeValue("00:00:10"))
'IE.Visible = True
MsgBox (IE.Document.body.innerHTML)
破损代码:
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://intranet/"
WaitUntilReady IE
'Application.Wait (Now + TimeValue("00:00:10"))
'IE.Visible = True
MsgBox (IE.Document.body.innerHTML)
函数化代码正是它应该做的。制作一个不会在屏幕上明显显示的IE对象,并返回一个包含google.com HTML代码内容的消息框
损坏的代码加载我们的内联网主页,在可见的IE窗口中,并返回此错误:
Run-time error '-2147417848 (80010108)'
Automation error
The object invoked has disconnected from its clients
我读过Excel VBA Controlling IE本地intranet,它建议使用IP地址而不是intranet,因为IP指向不同的启动屏幕,所以不起作用。
我也试过使用
Set IE = New InternetExplorerMedium
但这个A-似乎也不起作用,而B-意味着要确保我所有的同事都启用这个参考。
此外,我试过先加载google.com,然后让它导航到intranet/,这也没有帮助。
有人有什么建议吗?据我所知,加载intranet/是导致IE以某种方式与Excel断开连接吗?
SO!经过几天的研究,我完全不知道发生了什么,在另一篇文章中,我偶然发现有人在谈论intranet兼容性模式。
"力";Internet Explorer 8〃;intranet 中的浏览器模式
当我读到这篇文章时,我突然意识到,如果IE以兼容性加载,这将解释为什么Excel VBA宏失去了对IE的控制,因为兼容性模式可能是作为IE的单独实例加载。
设置>Internet选项>安全>本地Intranet>站点>
禁用"自动检测intranet"并启用"包括所有网络路径(UNCs)"完美地修复了我遇到的错误。
'simply replace -seem to work
' Set ie = CreateObject("InternetExplorer.Application")
Set ie = New InternetExplorerMedium
另一种解决方案
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate ("http://URLOnMyIntranet/site.html")
IE.Visible = True
Set IE = nothing
Set objShellApp = CreateObject("Shell.Application")
For Each objWindow In objShellApp.Windows
Debug.Print objWindow.LocationName
If LCase(objWindow.LocationName) = LCase("Your windows name, use debug to find out") Then
Set IE = objWindow
End If
Next`enter code here`
另请参阅这篇文章