【问题标题】:Terminating all explorer instances via VBA - Excel通过 VBA 终止所有资源管理器实例 - Excel
【发布时间】:2017-05-26 15:09:46
【问题描述】:
Private Sub CommandButton1_Click()
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
    objProcess.Terminate
Next

Set objProcesses = Nothing
Set objWMI = Nothing

Unload WebForm

End Sub    

在运行某些从基于 Web 的服务器检索数据的功能之前,尝试使用此方法关闭所有资源管理器实例,但在尝试关闭具有多个选项卡的打开浏览器时遇到问题。如果用户只打开一个 IE 窗口(一个选项卡),那么它会很好地关闭它并继续;如果这些用户分别打开了多个窗口(不是在一个窗口中进行选项卡),那么它会很好地关闭它们并继续前进;但由于某种原因,如果一个窗口打开时有多个选项卡,则会出现运行时错误“-2147217406 (80041002)”:“未找到”。任何解决此问题的帮助将不胜感激。

【问题讨论】:

  • 一种快速而肮脏的方法是将On Error Resume NextOn Error GoTo 0 包裹在objProcess.Terminate 周围。我在我的机器上进行了调试,发现第一个 Terminate 调用一次关闭了所有窗口,无论它们是否打开了多个选项卡。也许只需执行一次并退出循环。

标签: vba excel excel-2010


【解决方案1】:

不完全是您所问的,而是另一种使用 powershell 并包含一个选项的方法(从here 仅在 IE 已打开超过 X 秒的情况下关闭窗口。

Sub Comesfast()
X2 = Shell("powershell.exe get-process iexplore | ? { ([DateTime]::Now - $_.StartTime).TotalSeconds -gt 05 } | stop-process", 1)
End Sub

【讨论】:

    【解决方案2】:

    这个问题是由 IE 处理标签的方式引起的。有 1 个主要的 IE 实例,并为每个选项卡创建新进程 iexplore。 因此,当主主机实例关闭时,所有与选项卡相关的进程也会关闭。 它会导致您的代码出错,因为您正在枚举的集合是早期状态的状态快照,并且您正试图关闭不再存在的进程。这可以在 TaskManager 中观察到。

    现在回答如何改进您的代码(当然,简单的错误恢复下一步也会有所帮助,但如果用户打开了更多会话,则在第一个关闭实例后退出可能还不够):

    Private Sub CommandButton1_Click()
    Dim objWMI As Object, objProcess As Object, objProcesses As Object
    
        Do
            Set objWMI = GetObject("winmgmts://.")
            Set objProcesses = objWMI.ExecQuery("Select * FROM Win32_Process Where Name = 'iexplore.exe'")
    
            If objProcesses.Count > 0 Then
                For Each objProcess In objProcesses
                    objProcess.Terminate
                    Exit For
                Next
            End If
        Loop While objProcesses.Count > 0
    
        Set objProcesses = Nothing
        Set objWMI = Nothing
    
        Unload WebForm
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多