经过一番挖掘,我拼凑了以下解决方案。下面的 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