如何自动强行关闭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
感谢提'Workbook.EnableAutoRecover = FALSE;' –
这是在问题的好刺。但是,此方法会丢失通常在Excel启动时加载的任何自定义插件。 – Robino