2017-05-24 6 views
3

Versuchen, dies zu verwenden, um alle Instanzen von Explorer zu schließen, bevor einige Funktionen ausgeführt werden, die Daten von webbasierten Servern abrufen, aber ein Problem auftritt, wenn es versucht Schließen Sie einen geöffneten Browser mit mehreren Tabs. Wenn der Benutzer nur ein IE-Fenster (ein Tab) geöffnet hat, schließt es es einfach und geht weiter; Wenn diese Benutzer mehrere Fenster separat geöffnet haben (nicht in einem Fenster), schließt sie alle gut und geht weiter; aber aus irgendeinem Grund, wenn ein Fenster mit mehreren Tabs geöffnet ist, dann bekomme ich Laufzeitfehler '-2147217406 (80041002)': "Nicht gefunden". Jede Hilfe, die dabei hilft, wird sehr geschätzt.Beendet alle Explorer-Instanzen über VBA - Excel

+0

Eine schnelle und Der schmutzige Weg besteht darin, 'On Error Resume Next' und' On Error GoTo 0' um 'objProcess.Terminate' zu ​​wickeln. Ich debuggte auf meinem Computer und stellte fest, dass beim ersten Terminate-Aufruf alle Fenster gleichzeitig geschlossen wurden, unabhängig davon, ob mehrere Tabs geöffnet waren oder nicht. Vielleicht mach es einfach einmal und beende die Schleife. –

Antwort

1

nicht genau das, was Sie aufgefordert, aber ein anderer Ansatz, der Powershell verwendet und enthält eine Option (von here Fenster nur zu schließen, wenn IE ist seit mehr als X Sekunden geöffnet.

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

Dieses Problem wird durch verursacht wird, Art und Weise, wie IE Tabs behandelt Es gibt 1 Hauptinstanz von IE und für jede Registerkarte wird der neue Prozess iexplore erstellt Daher werden beim Schließen der Haupt-Host-Instanz auch alle tabsbezogenen Prozesse geschlossen Es verursacht einen Fehler in Ihrem Code, weil Die Auflistung, die Sie aufzählen, ist eine Momentaufnahme des Zustands von früher, und Sie versuchen, nicht existierende Prozesse zu schließen rved im TaskManager.

nun beantworten, wie Sie Ihren Code verbessern (natürlich einfach auf Fehler Lebenslauf nächste würde auch helfen, aber verlässt nach der ersten Instanz geschlossen konnte nicht genug sein, wenn der Benutzer mehrere Sitzungen geöffnet hat):

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

Ich habe das versucht, aber habe das gleiche Problem – Selrac