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

Posted

技术标签:

【中文标题】如何自动强制关闭excel,然后重新启动?【英文标题】:How to automate the forced closure of excel, followed by a restart? 【发布时间】:2013-09-01 11:32:30 【问题描述】:

在执行一些长时间运行的 VBA 代码(每天 24 小时运行)时,有时 excel 会冻结或崩溃,我正在研究以编程方式处理 excel 重新启动的方法。任何有关解决此问题的最佳方法的建议将不胜感激。

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

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

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

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

3) 重启excel

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

谢谢, 呸

【问题讨论】:

【参考方案1】:

经过一番挖掘,我拼凑了以下解决方案。下面的 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 启动时加载的任何自定义插件。

以上是关于如何自动强制关闭excel,然后重新启动?的主要内容,如果未能解决你的问题,请参考以下文章

如何在MSI Installshield重新启动管理器对话框中禁用“不关闭应用程序”选项

Ipad 锁定/关闭后重新启动 ios 应用程序

网络关闭或启动时如何重新启动.py?在 RPI [重复]

当设备重新启动并强制关闭应用程序时,Redmi 和其他自定义中文 ROM 中未收到 WorkManager doWork 回调

重新启动IoT设备并关闭自动更新

如果我强制终止进程然后尝试重新启动它,则 EADDRINUSE 错误