首页 > 解决方案 > VBA 找不到现有的 IE 会话

问题描述

有许多文章涉及查找现有的 IE 会话,然后使用它们。出于某种原因,它们对我不起作用。

我有以下创建 IE 11 会话的代码。有时,我手动终止了 VBA 代码。这使 IE 会话成为孤儿。

Set IE = GetObject("InternetExplorer.Application")
If IE Is Nothing Then Set IE = CreateObject("INTERNETEXPLORER.APPLICATION")
With IE
    .Visible = True
    .Navigate  URL

我找到了许多包含各种代码的文章来查找现有的 IE 会话,但它们对我不起作用。以下代码是一个示例。

Sub test_is()

Dim IE As SHDocVw.InternetExplorer

On Error Resume Next
Set IE = GetObject(, "InternetExplorer.Application")
Debug.Print Err.Description
On Error GoTo 0

If IE Is Nothing Then
Set IE = CreateObject("InternetExplorer.Application")
If IE Is Nothing Then
Debug.Print "error getting IE"
Else
IE.Quit
End If
End If
End Sub

当它到达“Set IE = GetObject(, "InternetExplorer.Application")”时,Debug.Print 报告“ActiveX 组件无法创建对象”。

随着代码的继续,一个 IE 会话被创建然后退出。这是唯一的 IE 会话退出。由其他代码创建的其他 IE 会话保持不变。我已经尝试了至少六个我在 NET 上找到的代码。他们为某些人工作,但从不为我工作。

下面是另一个例子:

Sub Find_IE_Windows()

Dim Shell As Object
Dim IE As Object

Set Shell = CreateObject("Shell.Application")

For Each IE In Shell.Windows
    If TypeName(IE.Document) = "HTMLDocument" Then
        MsgBox "Internet Explorer window found:" & vbCrLf & _
            "LocationURL=" & IE.LocationURL & vbCrLf & _
            "LocationName=" & IE.LocationName
        IE.Quit
    End If
Next

End Sub

就我而言,Shell.Windows.Count 为零。因此,代码从 For 循环直接转到 End Sub。

在其他情况下,当我运行 excel、IE 11 和 MS Edge 时,Shell.Windows.Count 为 2。这两个 shell 窗口是文件资源管理器会话,不是 Excel,不是 Edge,不是 IE 11。

我检查了 Microsoft Internet 控件、Microsoft HTML 对象库、Microsoft Shell 控件和自动化。我错过了其他图书馆吗?

唯一有效的代码是这个,但它会阻止 MS Edge 上网。所以,不能用。

Sub IE_Sledgehammer()
Dim objWMI As Object, objProcess As Object, objProcesses As Object
Set objWMI = GetObject("winmgmts://.")
Set objProcesses = objWMI.ExecQuery( _
    "SELECT * FROM Win32_Process WHERE Name = 'iexplore.exe'")
For Each objProcess In objProcesses
    Call objProcess.Terminate
Next
Set objProcesses = Nothing: Set objWMI = Nothing
End Sub

我正在运行 Windows 10 专业版和 Excel 2010。

标签: excelvbainternet-explorer

解决方案


推荐阅读