/ / Wie automatisiert man die erzwungene Schließung von Excel, gefolgt von einem Neustart? - Excel, Absturz, Ereignisprotokoll, Forceclose, Windows-Fehlerberichterstattung

Wie automatisiert man die erzwungene Schließung von Excel, gefolgt von einem Neustart? - Excel, Crash, Event-Log, Forceclose, Windows-Fehlerberichte

Gelegentlich friert Excel ein oder stürzt abIch arbeite mit etwas VBA-Code (läuft 24 Stunden am Tag) und prüfe Möglichkeiten, um den Neustart von Excel programmgesteuert zu erledigen.

Eine Idee, die ich habe, ist, eine Dotnet-App zu schreibenMöglicherweise wird dies durch ein Windows-Protokollierungsfehlerereignis ausgelöst, z. B. "Ereignisname: APPCRASH" und "Fehlerhafte Anwendung EXCEL.EXE", aber ich habe keine Ahnung, ob dies machbar / sinnvoll ist.

Wenn es ein vernünftiger Ansatz ist, würde ich mir vorstellen, dass die App die folgenden Aufgaben ausführt.

1) Automatisches Schließen / Löschen von Windows-FehlerfensternFelder wie "Möchten Sie weitere Informationen über das Problem senden?", "Microsoft Excel funktioniert nicht mehr" oder "Microsoft Excel versucht, Ihre Informationen wiederherzustellen."

2) Erzwingen Sie das Schließen von Excel, wenn es noch geöffnet ist (z. B. wenn es hängt), und beenden Sie alle excel.exe-Prozesse

3) Starten Sie Excel neu

Ist es möglich, eine solche App in dotnet zu schreiben? Nach welchen Referenzen / Tags sollte ich nach weiteren Informationen suchen?

Vielen Dank, Yug

Antworten:

3 für die Antwort № 1

Nach einigem Graben habe ich das zusammengebasteltfolgende Lösung. Der vbs-Code unten zwingt taskkill ausstehende excel.exe-Prozesse und öffnet dann die angegebene Excel-Datei (aus der vba-Code automatisch aus einem workheet_open-Ereignis neu gestartet werden kann).

1) Deaktivieren Sie die Windows-Fehlerberichterstattung: Starten Sie, suchen Sie nach "Problemberichten und Lösungen", ändern Sie Einstellungen, erweiterte Einstellungen, Deaktivieren Sie die Problemberichterstellung

2) Deaktivieren Sie die automatische Wiederherstellung für Excel: Klicken Sie im betreffenden WB auf; Datei, Optionen, Speichern, Deaktivieren der Dateiwiederherstellung nur für diese WB

3) Markieren Sie unter Windows Event Viewer, Anwendungsprotokolle, den Fehler (fehlerhafte Excel-App), klicken Sie mit der rechten Maustaste auf "Eine grundlegende Aufgabe erstellen", führen Sie application / script aus und geben Sie den gewünschten Dateinamen in 4) ein.

4) Fügen Sie den folgenden Code in eine Textdatei ein und speichern Sie sie als VbScript-Datei (.vbs).

Option Explicit

KillProcesses
ExcelRestart

Sub ExcelRestart()
Dim xlApp
Dim xlBook
Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
Set xlBook = xlApp.Workbooks.Open("C:...test.xlsx")
xlApp.visible = True
xlBook.activate
Set xlBook = Nothing
Set xlApp = Nothing
End sub

Sub KillProcesses
On error resume next
Dim objWMIService, WshShell
Dim proc, procList
Dim strComputer, strCommand
strCommand = "taskkill /F /IM excel.exe"
strComputer = "."
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:"& "{impersonationLevel=impersonate}!\"& strComputer & "rootcimv2")
Set procList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = "excel.exe"")
For Each proc In procList
WshShell.run strCommand, 0, TRUE
Next

End sub