Есть много статей, посвященных поиску существующих сессий 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, созданные другим кодом, остались без изменений. Я пробовал по крайней мере шесть кодов, которые я нашел в сети. Они работают на некоторых людей, но никогда не работают на меня.
Вот еще один пример:
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.
В других случаях Shell.Windows.Count были 2, когда у меня был Excel, IE 11 и MS Edge. И эти два окна оболочки были сеансами проводника, а не Excel, не Edge, не IE 11.
У меня проверены элементы управления Интернетом Microsoft, библиотека объектов 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 Pro и Excel 2010.