〖ExcelVBA・マクロ〗Excelを閉じるとき「未保存なら警告」する強制確認マクロ|保存忘れ事故を防ぐ

ExcelVBA

Excelで作業していて、次のような経験はありませんか?

  • 編集したのに保存せず閉じてしまった
  • 閉じた後に「保存しておけばよかった…」となった
  • 複数人で使うファイルで、保存忘れがよく起きる

Excelは閉じるときに「保存しますか?」の確認が出ますが、
慣れているとうっかり「保存しない」を押してしまうこともあります。

そこで今回は、Excelを閉じるときに未保存なら必ず警告を出す(強制確認)マクロを紹介します。
「保存する」「保存せず閉じる」「キャンセル(閉じない)」を選べるようにして、保存忘れを防ぎます。


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

この記事でできること

  • ブックを閉じる直前に、未保存かどうかチェック
  • 未保存なら警告を表示して選択させる
  • 「閉じるのをやめる(キャンセル)」ができる
  • 保存してから閉じる流れにも対応

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

今回の仕組みは「閉じる直前」に動かしたいので、
コードを書く場所は標準モジュールではなくThisWorkbookです。

  1. Alt + F11 でVBE(VBAエディタ)を開く
  2. 左側の「Microsoft Excel Objects」から ThisWorkbook をダブルクリック
  3. そこにコードを貼り付ける
エクセルマクロ未保存の前に閉じようとした場合に警告を表示させる

未保存なら警告を出す強制確認マクロ(コピペOK)

以下を ThisWorkbook に貼り付けてください。

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim res As VbMsgBoxResult

    ' 未保存なら True(変更がある状態)
    If ThisWorkbook.Saved = False Then

        res = MsgBox( _
            "このブックは未保存の変更があります。" & vbCrLf & _
            "保存してから閉じますか?" & vbCrLf & vbCrLf & _
            "[はい]:保存して閉じる" & vbCrLf & _
            "[いいえ]:保存せず閉じる" & vbCrLf & _
            "[キャンセル]:閉じるのをやめる", _
            vbYesNoCancel + vbExclamation, _
            "未保存の確認")

        Select Case res
            Case vbYes
                ' 保存して閉じる
                ThisWorkbook.Save

            Case vbNo
                ' 保存せず閉じる(Excelの確認を出さないために Saved を True にする)
                ThisWorkbook.Saved = True

            Case vbCancel
                ' 閉じるのをやめる
                Cancel = True
        End Select

    End If

End Sub

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

① ThisWorkbook.Saved で「未保存かどうか」が分かる

If ThisWorkbook.Saved = False Then

Saved は「保存済みかどうか」を表します。
編集して保存していない場合は False になります。


② MsgBox の Yes/No/Cancel で選ばせる

vbYesNoCancel + vbExclamation

これで「はい・いいえ・キャンセル」の3択を出せます。
保存忘れ対策ではこの形が一番使いやすいです。


③ 「保存せず閉じる」を選んだときのポイント

ThisWorkbook.Saved = True

これを入れると、Excel標準の「保存しますか?」確認が出なくなります。
(ユーザーが「保存しない」を選んだので、二重に聞かないための工夫です)


④ 「閉じるのをやめる」は Cancel = True

Cancel = True

これを設定すると、ブックは閉じません。
「やっぱり閉じない」を実現できます。


よくあるカスタマイズ

① ブックが未保存(新規作成のまま)の場合は「名前を付けて保存」を出したい

新規作成でまだ保存していないブックは ThisWorkbook.Path が空です。
その場合は、SaveAs を使うと親切です。

If Len(ThisWorkbook.Path) = 0 Then
    Application.Dialogs(xlDialogSaveAs).Show
Else
    ThisWorkbook.Save
End If

② 警告メッセージをもっと短くしたい

res = MsgBox("未保存です。保存しますか?", vbYesNoCancel + vbExclamation)

③ 特定シートの入力欄だけ変更があったら警告したい

より厳密にやる場合は、変更フラグ(True/False)を持つ方法があります。
ただし記事としては一段難しくなるので、まずは本記事の Saved 判定が簡単でおすすめです。


動作確認の手順

  1. コードを貼ったら、ブックを .xlsm 形式で保存
  2. 何かセルを編集する(未保存状態にする)
  3. ×ボタンなどで閉じる
  4. 「未保存の確認」が出ることを確認

まとめ:保存忘れ防止は「閉じる直前チェック」が一番効く

保存忘れは、気をつけていても起きるものです。
今回のように閉じる直前に強制確認を入れておくと、事故をかなり減らせます。

  • 未保存なら必ず警告
  • 保存/保存せず閉じる/キャンセルが選べる
  • 運用ブック(共有・定型作業)ほど効果が大きい

ぜひ、重要な業務ブックに導入してみてください。

Excelで作業していて、次のような経験はありませんか?

  • 編集したのに保存せず閉じてしまった
  • 閉じた後に「保存しておけばよかった…」となった
スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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