2016-05-22 56 views
2

我正在使用以下代碼關閉所有IE窗口。這是錯誤處理的一部分,當我的大型函數掛起或崩潰時,它會自動啓動一個新窗口。當發生這種情況時,我想關閉所有的IE窗口,除了1(我想保持最後一個打開以維持會話,因此瀏覽器在再次打開時不必重新進行身份驗證)。關閉除VBA中的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 

回答

0

您可以使用Count財產,並與TASKKILL使用PID:

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 
+0

謝謝,但沒有奏效。我意識到終止命令關閉更多的Windows比打算這就是爲什麼我看到了奇怪的行爲 – SimaPro

+0

嗯,有道理。然後我們需要獲得PID並且只關閉那些一個一個的實例。請參閱上面的代碼,它適合我。 – ib11

+0

@SimaPro - 您看到解決方案嗎?我編輯了答案,以便使用不同的方法完全符合您的需求。 – ib11

0

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