Excelを終了する方法
Excelを終了するときは「Application.Quit」メソッドを呼び出します。
Quitメソッドには引数も戻り値もありません。
以下の関数を実行すると、開いているExcelブックも含めてExcelを終了します。
1 2 3 4 |
Sub ApplicationQuit() '// Excelを終了する Application.Quit End Sub |
ただ、この場合、未保存のブックがあると、保存するかどうかのダイアログが表示されます。
5つのブックを開いていて、2つのブックが未保存だった場合は2回ダイアログが表示されます。
未保存のブックを全て保存せずにExcelを終了する方法
Excelを終了する際に、未保存のブックがあっても保存せずに終了したい場合は以下のように書きます。
1 2 3 4 5 6 7 |
Sub ApplicationQuitWithoutSaving() '// 保存確認ダイアログを表示しない Application.DisplayAlerts = False '// Excelを終了する Application.Quit End Sub |
Application.DisplayAlertsにFalseを設定すると、保存するかどうかのダイアログが表示されません。
そのため、未保存のブックがあっても保存せずにExcelが終了します。Book1のような新規ブックが未保存の場合も保存されません。
未保存のブックを全て保存してExcelを終了する方法
Excelを終了する際に、保存していないブックがある場合に自動的に保存したい場合は以下のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub ApplicationQuitWithSaving() Dim wb As Workbook '// ブック '// 保存確認ダイアログを表示しない Application.DisplayAlerts = False '// 開いているブックを1つずつループ For Each wb In Workbooks '// ブックが未保存の場合 If wb.Saved = False Then '// 保存する wb.Save End If Next wb '// Excelを終了する Application.Quit End Sub |
保存確認ダイアログは表示されませんが、未保存のブックは保存して閉じられます。
新規ブックのBook1などで未保存のままになっているブックはドキュメントフォルダの直下にBook1.xlsxのように保存されます。
Book1にマクロが記載されていて、それを保存するかどうか、という話はありますが、コードを書いておいて保存せずにApplication.Quitメソッドで強制的にExcelを終了する、ということはまず考えられないため、ここでは紹介しません。
もしそういう用途があるのであれば、「Application.DisplayAlerts = False」の行を削除して保存ダイアログを出すようにした方がよいでしょう。
今動いているExcelとは別のExcelを起動して終了する方法
VBAを実行しているExcelとは別に、VBAの中で別のExcelを起動することが出来ます。その場合の別Excelアプリケーションを終了する場合について説明します。
ここでは別Excelアプリでの新規ブックを作成してA1セルに”abc”と入力して、ドキュメントフォルダにabc.xlsxで保存してから別Excelを終了しています。
変数exが別Excelアプリケーションを指しています。
別Excelは「New Excel.Application」として変数を作成することで別Excelが起動します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub OtherApplicationQuit() Dim ex As New Excel.Application '// 別のExcelアプリケーション Dim wb As Workbook '// ブック '// 新規ブック作成(この時点では未保存) Set wb = ex.Workbooks.Add '// A1セルに入力 wb.Worksheets(1).Range("A1").Value = "abc" '// ブックを保存 Call wb.SaveAs(Filename:="C:\Users\username\Documents\abc.xlsx") '// ブックを閉じる Call wb.Close '// 別Excelを終了する ex.Quit End Sub |
別Excelの変数宣言の部分を「Dim ex As New Excel.Application」ではなくCreateObject関数を使って書く場合は以下のようになります。
1 2 3 4 5 6 7 |
Sub OtherExcelCreateObject() Dim ex As Object Set ex = CreateObject("Excel.Application") '// 以下省略 End Sub |