〖ExcelVBA・マクロ〗Excelを閉じるときに強制保存するマクロ|保存忘れをゼロにする方法

ExcelVBA

Excelでよくあるトラブルの1つが、保存忘れです。

  • 編集したのに保存せず閉じてしまった
  • 閉じる確認で「保存しない」を押してしまった
  • 共有ファイルで、最後の編集が保存されていなかった

こうした事故を防ぐ一番確実な方法は、
閉じるときに自動で保存してしまう(強制保存)ことです。

そこで今回は、Excelを閉じる直前に強制保存するVBAを紹介します。
未保存の変更があれば自動保存し、もし「まだ一度も保存していない新規ブック」なら、名前を付けて保存を促す形にします。


スポンサーリンク
スポンサーリンク

この記事でできること

  • ブックを閉じる直前に自動で保存(強制保存)
  • 未保存の変更があるときだけ保存する
  • 新規ブック(未保存ファイル)の場合は「名前を付けて保存」を出す
  • エラー時でもExcelの設定を壊さない安全な書き方

重要:この仕組みは「ThisWorkbook」に書く

「閉じるときに自動で動かす」ため、コードはThisWorkbookに書きます。

  1. Alt + F11 でVBE(VBAエディタ)を開く
  2. 左側「Microsoft Excel Objects」→ ThisWorkbook をダブルクリック
  3. コードを貼り付ける
エクセルを未保存で閉じるときに動作するマクロ記載エディター箇所

閉じるときに強制保存するマクロ(基本・コピペOK)

まずは、すでに保存済みのブック(パスがあるブック)を想定した最もシンプルな例です。
未保存の変更があるときだけ自動保存します。

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    On Error GoTo ErrHandler

    ' 未保存の変更があるときだけ保存
    If ThisWorkbook.Saved = False Then
        ThisWorkbook.Save
    End If

    Exit Sub

ErrHandler:
    MsgBox "強制保存でエラーが発生しました。" & vbCrLf & _
           "番号:" & Err.Number & vbCrLf & _
           "内容:" & Err.Description, vbExclamation

End Sub

実務向け:新規ブック(まだ保存していない)にも対応する版

新規作成しただけのブックは、ThisWorkbook.Path が空です。
この場合、Save では保存先が無いので、名前を付けて保存を促す必要があります。

以下は、保存済みブックは自動保存し、新規ブックなら「名前を付けて保存」を表示する実務向けコードです。

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    On Error GoTo ErrHandler

    ' 未保存の変更があるときだけ処理
    If ThisWorkbook.Saved = False Then

        ' まだ一度も保存していない(新規ブック)場合
        If Len(ThisWorkbook.Path) = 0 Then

            ' 名前を付けて保存ダイアログを表示
            ' ※キャンセルされた場合は閉じるのを中止
            If Application.Dialogs(xlDialogSaveAs).Show = False Then
                Cancel = True
                Exit Sub
            End If

        Else
            ' 既に保存済みのブックは、そのまま上書き保存
            ThisWorkbook.Save
        End If

    End If

    Exit Sub

ErrHandler:
    MsgBox "強制保存でエラーが発生しました。" & vbCrLf & _
           "番号:" & Err.Number & vbCrLf & _
           "内容:" & Err.Description, vbExclamation

End Sub

コード解説(初心者向け)

① Saved = False のときだけ保存する

If ThisWorkbook.Saved = False Then

「編集したのに保存していない状態」だけを対象にすることで、不要な保存を減らせます。


② Path が空なら「未保存(新規)」

If Len(ThisWorkbook.Path) = 0 Then

保存先が存在しないため、SaveAsが必要です。


③ SaveAsダイアログをキャンセルしたら閉じない

If Application.Dialogs(xlDialogSaveAs).Show = False Then
    Cancel = True
End If

強制保存の目的は保存忘れ防止なので、
キャンセルされたら閉じるのを止めるのが安全です。


よくある注意点(運用前に必ず確認)

① 「保存したくない」作業も強制で保存される

このマクロを入れると、基本的に編集した内容は保存されます。
「試しに編集しただけ」「一時的に見ただけで保存したくない」という運用には向きません。

その場合は、前回の「未保存なら警告して選ばせる」方式がおすすめです。


② 共有ファイル・読み取り専用には注意

読み取り専用で開いている場合や、権限がない場合は保存に失敗します。
そのときに備えて、記事のコードではエラー表示を入れています。


動作確認の手順

  1. このブックを .xlsm 形式で保存
  2. セルを編集(未保存状態にする)
  3. ×ボタンなどで閉じる
  4. 自動で保存されて閉じることを確認

まとめ:強制保存は「保存忘れ事故」を確実に防げる

閉じるときに強制保存する仕組みを入れておくと、保存忘れを限りなくゼロにできます。

  • 閉じる直前に未保存かチェック
  • 保存済みブックは自動上書き保存
  • 新規ブックは「名前を付けて保存」を出す
  • キャンセルされたら閉じない(安全運用)

重要な業務ブックや、運用が決まっているファイルには特におすすめです。
ぜひ導入してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました