← コード一覧へ戻る
実務Excel・Windows連携

保存済みを確認してExcelを終了する

未保存ブックが1冊でもあれば中止し、確認後に現在のExcelを終了します。

実行前に確認

  • 自動保存や未保存内容の破棄はしません。ほかのブックの終了イベントが終了を取り消すこともあります。
  • DisplayAlerts=FalseやSaved=Trueで保存確認を隠す方法は使わないでください。
  • 公式仕様とコードを照合した例です。Excel実機での実行は未検証です。業務ブックではなくコピーで試してください。

1サンプルコード

Option Explicit
Sub PracticeAdvanced8004()
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If Not wb.Saved Then
            MsgBox "未保存のブックがあります: " & wb.Name & vbCrLf & "先に保存するか、手動で閉じてください。"
            Exit Sub
        End If
    Next wb
    If Not Application.DisplayAlerts Then
        MsgBox "確認ダイアログが無効な状態のため中止します。"
        Exit Sub
    End If
    If MsgBox("このExcelで開いているブックをすべて閉じ、Excelを終了しますか?", _
        vbYesNo + vbExclamation + vbDefaultButton2) <> vbYes Then Exit Sub
    Application.Quit
End Sub

図で見る操作の流れ

イメージ図

準備、実行する操作、確認する結果の順で示しています。

  1. 準備

    他の作業を終え、コードを含めてすべてのブックを保存します。動作を見るだけなら最後の確認で[いいえ]を選びます。

  2. 操作

    未保存ブックが1冊でもあれば中止し、確認後に現在のExcelを終了します。

  3. 結果

    未保存ブックがあれば名前を表示して止まります。すべて保存済みで[はい]なら、そのExcelインスタンスが終了します。

自動保存や未保存内容の破棄はしません。ほかのブックの終了イベントが終了を取り消すこともあります。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
  1. 1

    Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[標準モジュール]へ、この例だけを貼り付けます。

  2. 2

    他の作業を終え、コードを含めてすべてのブックを保存します。動作を見るだけなら最後の確認で[いいえ]を選びます。

  3. 3

    PracticeAdvanced8004を実行し、終了してよい場合だけ[はい]を選びます。

  4. 4

    未保存ブックがあれば名前を表示して止まります。すべて保存済みで[はい]なら、そのExcelインスタンスが終了します。

使っている機能の公式ドキュメント(Microsoft Learn)