次の簡単な VBScript が正しいかどうか誰か教えてください。他のプロセスが実行された後に Excel を閉じる (そして Excel を開いたままにする) はずですが、機能しません。
Set MyApp = CreateObject("Excel.Application")
MyApp.Quit
次の簡単な VBScript が正しいかどうか誰か教えてください。他のプロセスが実行された後に Excel を閉じる (そして Excel を開いたままにする) はずですが、機能しません。
Set MyApp = CreateObject("Excel.Application")
MyApp.Quit
CreateObject
新しいオブジェクトを作成します。あなたの質問を正しく理解している場合は、既に実行中の (孤立した) Excel プロセスにアタッチして、それらを終了させたいと考えています。あなたはそれを行うことができますGetObject
:
On Error Resume Next
Do
Set xl = GetObject(, "Excel.Application")
status = Err.Number
If status = 0 Then
For Each wb in xl.Workbooks
wb.Close False 'discard changes in open workbooks
Next
xl.Quit
ElseIf status <> 429 Then
WScript.Echo Err.Number & ": " & Err.Description
WScript.Quit 1
End If
Until status = 429
On Error Goto 0
これにより、実行中のすべての Excel インスタンスが閉じられ、開いているワークブックのすべての変更が破棄されることに注意してください。開いているワークブックの変更を保存する場合は、Close
メソッドの引数を に変更しますTrue
。実行し続けたい Excel インスタンスがある場合は、それらを閉じないように除外するコードを追加する必要があります。
また、これにより、応答のないインスタンスが強制的に終了されるわけではないことに注意してください。そのためには、プロセスを強制終了する必要があります。
Set wmi = GetObject("winmgmts://root/cimv2")
For Each xl In wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'excel.exe'")
xl.Terminate
Next
これを試してください。
ThisWorkbook.Saved = True
Application.Quit
CreateObjectは COM オブジェクト を作成するので、
Set MyApp = CreateObject("Excel.Application")
新しい Excel プロセスを開始します。GetObjectを使用して、「指定された ProgID を持つ既存のオブジェクトを取得」します。理論と実践については、こちらを参照してください。