4.8 ワークブックを扱うときの注意
 ワークブックを一度も開いていないとき、開いているときと一度でも開いた後の、VBS(WSH)終了時のエクセルの動き(エクセルが勝手に終了するかどうか)には違いがあり、特別な理由が無ければエクセルの終了メソッドQuitを実行しましょう!なぜQuitが必要かは、3つの事例をもとに説明します。

 なお、全ての例は分かりやすいようにエクセルの画面を表示するようにしています。例によっては表示しないと、ゾンビエクセルになります。ゾンビエクセルの対処は4.9 異常終了時の対処を参考にしてください。ただし、自己責任の上で(汗)
ワークブックを一度も開いていないとき
 エクセルオブジェクトを作成(エクセルを起動)した後、ワークブックを一度も開いたりせずにVBA(WSH)のプログラムが終了すると、エクセルも一緒に終了します。

 下の例がそれなんですが、これってワークブックが無いときは勝手に終了するの?と勘違いしそうですね(汗)。でも、前提条件はワークブックを一度も開いたり作ったりしていないです。

 まぁ、こんな使い方をする人はいないと思いますが…。

Option Explicit

Dim objExcel

'エクセルオブジェクトを作成します
Set objExcel = CreateObject("Excel.Application")

'エクセル画面を表示し、2秒待機します
objExcel.Visible = True
WScript.sleep(2000)

'エクセルオブジェクトの破棄
Set objExcel = Nothing
 ※この例では、Quitは入れてません
ワークブックを開いているとき
 ワークブックを開くか、新しいワークブックを作った状態だと、VBA(WSH)のプログラムが終了してもエクセルは終了しません。

 下の例がそれです。ワークブックを開いた後、エクセルの終了を行わずにVBS(WSH)のプログラムを終了しています。ただし、出っぱなしにしたいならこれで問題ナシです。

 この例をエクセルを非表示で実行した場合、仮にVBS(WSH)のプログラムと共にエクセルも終了すると誤解していると、実行するたびにゾンビエクセルが出来てしまいます。しかも、ワークブックは「×××により編集中です」なんて状態にも…(汗)

Option Explicit

Dim objExcel

'エクセルオブジェクトを作成します
Set objExcel = CreateObject("Excel.Application")

'エクセル画面を表示します
objExcel.Visible = True

'ワークブックを開きます
objExcel.Workbooks.Open "c:\happy\リスト.xls"

'エクセルオブジェクトの破棄
Set objExcel = Nothing
 ※この例でも、Quitは入れてません
ワークブックを開いた後
 ワークブックを開くか新しいワークブックを作り、その後ワークブックを閉じてからVBA(WSH)のプログラムを終了しても、なんとエクセルは終了しません。

 下の例がそれです。ワークブックを閉じ、エクセルには何も表示されていない状態ですが、VBS(WSH)のプログラムが終了してもエクセルは出っぱなしになります。

 この例をエクセルを非表示で実行した場合、仮にエクセルに何も表示されていない状態ならVBS(WSH)のプログラムと共にエクセルも終了すると誤解していると、実行するたびにゾンビエクセルが出来てしまいます(汗)

Option Explicit

Dim objExcel

'エクセルオブジェクトを作成します
Set objExcel = CreateObject("Excel.Application")

'エクセル画面を表示します
objExcel.Visible = True

'ワークブックを開きます
objExcel.Workbooks.Open "c:\happy\リスト.xls"

'2秒待機します
WScript.Sleep(2000)

'ワークブックを閉じます
objExcel.Workbooks(1).Close

'エクセルオブジェクトの破棄
Set objExcel = Nothing
 ※この例でも、Quitは入れてません
Copyright(C) 1999-2006 結城圭介。 All rights reserved