はじめに
ExcelVBA の Application.Quit は、Excel(アプリ)そのものを終了するコマンドです。
単に「終了する」といっても、変更が保存されていなかったり、複数のブックが開いている状態だった場合などで変更の保存を確認するダイアログが出てきます。
色々なケースでどう対処するべきか見ていきましょう。
Application.Quit のみ実行
まずは、単純なコードで挙動を確かめてみます。
Sub myQuit()
Application.Quit
End Sub
変更がない場合は、Excel自体も終了します。
もし内容に変更があった場合、ブックを閉じる前に「このファイルの変更内容を保存しますか?」というメッセージが出ます。

変更を保存して終了
ファイルの内容を変更して保存したい場合は、Saveメソッドを使えば、ダイアログは表示されずに常に上書き保存されてExcelを終了します。
Sub myQuit()
ThisWorkbook.Save '変更を保存
Application.Quit
End Sub
変更を保存せずに終了
ファイルの内容を変更せずに終了したい場合は、
ThisWorkbook.Saved = True
として、セーブしたものとして終了させます。
Sub myQuit2()
ThisWorkbook.Saved = True ’変更を保存しない
Application.Quit
End Sub
複数のブックが開いている場合
Application.Quit はExcel自体を終了させるので、ブックが1つでなく複数開いている場合には開いている他のブックにも影響が出てきます。
そのまま実行すると、変更がある場合は、各ブックを閉じる際にダイアログが表示されます。
ブックを読込み用で開いている場合は内容が変更されていないので全て閉じる事になります。
'全てのブックを保存せずに終了
Sub myQuit3()
Dim bk As Workbook
For Each bk In Workbooks
bk.Saved = True
Next
Application.Quit
End Sub
'全てのブックを保存して終了
Sub myQuit4()
Dim bk As Workbook
For Each bk In Workbooks
bk.Save
Next
Application.Quit
End Sub
ThisWorkbookのみ終了したい時
Application.Quit はExcel自体を終了するコマンドです。
そのため他のブックが開いていれば、そのブックにも影響が及びます。
ThisWorkbookのみ終了させたい場合は、Closeメソッドを実行しますが、これだと空のExcelが居残ってしまいます。
これを解説するには、現在開いているブックの数を調べてから終了方法を指定すれば良いでしょう。
Sub myQuit5()
'ThisWorkbook.Saved = True '変更を保存しない
'ThisWorkbook.Save '変更を保存
If Workbooks.Count > 1 Then
ThisWorkbook.Close
Else
Application.Quit
End If
End Sub
このプログラムでは、Workbooks.Count で現在開いているブックの数を調べています。
複数あれば、ThisWorkbook.Close で自分だけが終了し、
1つだけなら、Application.Quit を使います。
これなら、1つだけ開いている場合でも空のExcelが居残る事はありません。
前段で、変更の有無を指定すれば、ダイアログを表示しないで終了します。
(コメントアウトを外して利用してください。)
まとめ
Application.Quit はExcel自体を終了させるコマンドです。
Excelは複数のブックを開く事ができるので、終了の際は各ブックに変更がないかを見に行きます。
もし、変更が無ければそのまま終了し、変更があればダイアログを出してどうするか聞いてきます。
ダイアログを出したくなければ、予め処理を行っておきます。
ThisWorkbook.Saved = True ‘変更を保存しない
ThisWorkbook.Save ‘変更を保存
複数のブックがある場合と、1つのブックの場合は、最後のプログラム(myQuit5)を参考にしてみてください。
コメント