问题是/曾经是?关于在用于自动化的 VBScript 崩溃时可靠地关闭 Excel:
如果你写
Set oExcel = CreateObject("Excel.Application")
您创建一个“简单”变量。当变量超出范围时,VBScript 可能会减少引用计数器,但它肯定不会为您退出 Excel。
如果您想在 VBScript 中实现 atexit 调用或异常处理等功能,则必须在其 Class_Terminate Sub 中编写一个“执行我的意思”的类。一个简单的例子:
Option Explicit
Class cExcelWrapper
Private m_oExcel
Public Sub Class_Initialize()
Set m_oExcel = CreateObject("Excel.Application")
End Sub
Public Sub Class_Terminate()
m_oExcel.Quit
End Sub
Public Default Property Get Obj()
Set Obj = m_oExcel
End Property
End Class
Dim oExcel : Set oExcel = New cExcelWrapper
Dim oWBook : Set oWBook = oExcel.Obj.WorkBooks.Add()
oExcel.Obj.Visible = True
oExcel.Obj.DisplayAlerts = False
oWBook.Sheets(1).Cells(1,1) = "Div by Zero"
WScript.Echo "Check TaskManager & Enter!"
WScript.StdIn.ReadLine
WScript.Echo 1 / 0
(意味着以“cscript 20381749.vbs”开头)
如果您使用打开的任务管理器运行此脚本,您将在进程列表中看到 Excel 弹出窗口(以及在屏幕上,因为 .Visible)。如果您然后按 Enter,脚本将中止并出现“除零”错误,并且Excel 进程将从进程列表中消失。
如果您删除 .DisplayAlerts 设置,Excel 将询问您是否保存您的工作 - 从而证明 Class_Terminate() Sub 中的 .Quit 确实将 Excel 踢入再见模式。
该课程需要进一步的工作(基本设置,常见操作(保存?)在 .Quit 之前,也许是防止滥用(Set oExcel = Nothing 或其他货物邪教废话),th .Obj 添加不好,也不会如果你在调试器中杀死你的 .vbs 可以帮助你,但对于标准场景,你不会再看到 Excel 僵尸了。