如何自动化强制closures的Excel,然后重新启动?

有时会执行一些长时间运行的VBA代码(运行24小时/天)时出现冻结或崩溃,我正在研究如何以编程方式处理Excel的重新启动。 任何build议最好的方式去这个将不胜感激。

我的一个想法是编写一个dotnet应用程序,可能是由诸如“事件名称:APPCRASH”和“错误应用程序EXCEL.EXE”等Windows日志logging错误事件触发的,但是我不知道这是否可行/明智的方式去做。

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

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

2)强制closuresexcel如果仍然打开(如挂),以及杀死任何excel.exe进程

3)重新启动excel

是可以在dotnet编写这样一个应用程序? 我应该寻找什么参考/标签来查找更多信息?

谢谢,Yug

经过一番挖掘,我拼凑出了以下解决scheme。 下面的vbs代码将强制taskkill任何优秀的excel.exe进程,然后打开指定的excel文件(从中可以从工作表中打开自动重新启动vba代码)。

1)closuresWindows错误报告:开始,search“问题报告和解决scheme”,更改设置,高级设置,closures问题报告

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

3)在Windows事件查看器,应用程序日志中,突出显示错误(错误Excel应用程序),右键单击“创build一个基本任务”,运行应用程序/脚本,并input文件中select的名称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 
Interesting Posts