如何自动强行关闭excel,然后重新启动?

如何自动强行关闭excel,然后重新启动?

问题描述:

在执行一些长时间运行的VBA代码时(偶尔运行24小时/天),有时会出现excel死机或崩溃的情况,而且我正在研究以编程方式处理excel重新启动的方法。任何建议最好的方式去这个将不胜感激。如何自动强行关闭excel,然后重新启动?

我的一个想法是编写一个dotnet应用程序,可能是由例如'Event Name:APPCRASH'和'Faulting application EXCEL.EXE'等Windows日志记录错误事件触发的,但我不知道如果这是可行的/明智的方式去解决它。

如果碰巧是一个明智的方法,我会设想应用程序可能执行以下任务;

1)自动关闭/取消任何窗口错误弹出框,如“您想发送有关该问题的更多信息吗?”,“Microsoft Excel已停止工作”或“Microsoft Excel正试图恢复您的信息。 “

2)力,如果仍然打开(例如,如果挂关闭Excel),以及杀死任何EXCEL.EXE处理

3)重新启动Excel

是可以写的dotnet这样的应用程序?我应该寻找哪些参考/标签以查找更多信息?

感谢, YUG

一些挖后,我拼凑以下解决方案。下面的vbs代码将强制taskkill任何优秀的excel.exe进程,然后打开指定的excel文件(从中可以从worksheet_open事件中自动重启vba代码)。

1)关闭Windows错误报告: 开始,搜索“问题报告和解决方案”,更改设置,高级设置,关闭问题报告

2)为Excel禁用自动恢复:在 内WB问题,点击;文件,选项,保存,禁用文件恢复此WB仅

3)在Windows事件查看器,应用程序日志,突出显示错误(错误Excel应用程序),右键单击'创建一个基本任务',运行应用程序/脚本,并在4)中输入所选文件的名称。

4)将以下代码粘贴到文本文件,然后保存为一个VBScript文件(.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 & "\root\cimv2") 
    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 
+0

感谢提'Workbook.EnableAutoRecover = FALSE;' –

+0

这是在问题的好刺。但是,此方法会丢失通常在Excel启动时加载的任何自定义插件。 – Robino