【问题标题】:Close all IE windows except 1 in VBA在 VBA 中关闭除 1 之外的所有 IE 窗口
【发布时间】:2016-09-19 13:49:33
【问题描述】:

我正在使用以下代码关闭所有 IE 窗口。这是错误处理的一部分,当我的较大功能挂起或崩溃时,它会自动启动一个新窗口。发生这种情况时,我想关闭除 1 之外的所有 IE 窗口(我想让最后一个窗口保持打开状态以保持会话,因此浏览器在再次打开时不必重新进行身份验证)。

我可以更新下面的循环,让它关闭除最后一个以外的所有 IE 窗口(它打开哪个特定窗口无关紧要,只要它打开一个即可)。

Function closeallIE()
        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
        Debug.Print wait(3)
    End Function

【问题讨论】:

    标签: vba excel internet-explorer


    【解决方案1】:

    您可以使用 Count 属性并将 PID 与 Taskkill 一起使用:

    Sub closeallIE()
        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'")
        Dim j As Integer
        j = objProcesses.Count
        For Each objProcess In objProcesses
            If j > 1 Then Shell "taskkill /f /PID " & CStr(objProcess.ProcessID), vbHide
    
            j = j - 1
        Next
        Set objProcesses = Nothing
        Set objWMI = Nothing
    
    End Sub
    

    【讨论】:

    • 谢谢,但没用。我意识到终止命令关闭了比预期更多的 Windows,这就是为什么我看到奇怪的行为
    • 嗯,有道理。然后我们需要获取 PID 并仅将这些实例一一关闭。请参阅上面对我有用的代码。
    • @SimaPro -- 你看到解决方案了吗?我编辑了答案,以便它使用不同的方法完全满足您的需求。
    【解决方案2】:

    此代码 sn-p 取自 HP UFT Website regarding closing browser tabs。 这无需任何调整即可工作,并使用创建时间关闭所有选项卡,但创建时间最旧的选项卡除外。

    On error resume next
    
    Set oDesc = Description.Create
    oDesc( "micclass" ).Value = "Browser"
    
    oDesc( "application version" ).Value = browserPropertyApplicationVersion
    
    Set vIE= Desktop.ChildObjects(oDesc)
    vIECount=vIE.count
    
    z=vIECount
    For m=1To vIECount - 1
    z=z-1
        If Browser("creationtime:="&z).Exist(0) Then
    
                Browser("creationtime:=1").Close
    
        End If
    
    
    If err.number > 0 Then
    message = message & " @@@@@@@Error shown by application is :  " & err.description
    icon_flag=0
    End If
    Next
    
    Set oDesc = Nothing
    Set vIE=Nothing
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多