質問は/でしたか?自動化に使用される VBScript がクラッシュしたときに Excel を確実に閉じる方法について:
あなたが書くなら
Set oExcel = CreateObject("Excel.Application")
「単純な」変数を作成します。変数がスコープ外になると、VBScript は ref カウンターをデクリメントすることがありますが、確実に 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」で開始することを意味します)
このスクリプトを Taskmanager を開いた状態で実行すると、プロセス リスト (および .Visible により画面上) に Excel ポップアップが表示されます。次に Enter キーを押すと、スクリプトは "Division by Zero" エラーで中止され、Excel プロセスはプロセス リストから消えます。
.DisplayAlerts 設定を削除すると、Excel は作業を保存するかどうかを尋ねます。これにより、Class_Terminate() Sub の .Quit が実際に Excel をバイバイ モードにすることが証明されます。
このクラスは、.Quit の前に追加の作業 (基本設定、一般的なアクション (保存?)デバッガーで .vbs を強制終了する場合に役立ちますが、標準的なシナリオでは、Excel ゾンビは表示されなくなります。