objProcess.Terminate Not Found указывает c для iexplore.exe - PullRequest
0 голосов
/ 12 марта 2020

При завершении работы проводника inte rnet в VBA я использую следующий код (более или менее) из stackoverflow:

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'")
    MsgBox "iexplore.exe processes = " & objProcesses.Count
    For Each objProcess In objProcesses
        Call objProcess.Terminate
    Next
    Set objProcesses = Nothing: Set objWMI = Nothing
End sub

Количество возвращаемых процессов равно "2" (что правильно ), но в первой итерации For l oop, когда первый iexplore.exe завершается, что также завершает второй процесс, и поэтому во второй итерации l oop возникает ошибка «not found». Я понимаю, что это потому, что закрытие одного процесса iexplorer.exe закрывает все задачи iexplore.exe.

Мой вопрос: как я могу ссылаться и завершать только первый 'objprocess' в списке objprocesses ИЛИ форсировать For l oop выйти после одной итерации?

1 Ответ

0 голосов
/ 13 марта 2020

enter image description here

Вы имеете в виду, что хотите закрыть первую вкладку или IE окно?

Я предлагаю вам создать объект Shell и l oop - IE windows.

Вы можете закрыть первое окно IE и выйти из l oop, либо вы можете сопоставить заголовок окна IE и закрыть его, указав c IE окно.

Необходимо добавить ссылку на Microsoft Shell Controls and Automation и Microsoft Inte rnet Controls .

enter image description here

Код:

Sub demo()

Dim oShellWin As Shell
Dim oWin As Object
Dim objIE As InternetExplorer

    Set oShellWin = New Shell

      For Each objIE In oShellWin.Windows

        If TypeName(objIE.Document) = "HTMLDocument" Then

            'Debug.Print objIE.Document.Title
            If objIE.Document.Title = "Bing" Then 'User can modify the title here...
                objIE.Quit
                Exit For
            End If
        End If

    Next objIE

End Sub

Выход:

enter image description here

Кроме того, вы можете попытаться изменить код в соответствии с вашими требованиями.

...