1

次の簡単な VBScript が正しいかどうか誰か教えてください。他のプロセスが実行された後に Excel を閉じる (そして Excel を開いたままにする) はずですが、機能しません。

Set MyApp = CreateObject("Excel.Application")
MyApp.Quit
4

3 に答える 3

4

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
于 2015-06-22T08:04:38.147 に答える
0

これを試してください。

ThisWorkbook.Saved = True
Application.Quit
于 2015-06-22T01:59:17.523 に答える
0

CreateObjectは COM オブジェクト を作成するので、

Set MyApp = CreateObject("Excel.Application") 

新しい Excel プロセスを開始します。GetObjectを使用して、「指定された ProgID を持つ既存のオブジェクトを取得」します。理論と実践については、こちらを参照してください。

于 2015-06-22T06:29:12.670 に答える