ブックが保存済みかどうか(最後に保存してから編集があったかどうか)
を判定する方法を紹介します。
WorkbookオブジェクトのSavedプロパティを調べます。
基本構文
If 対象ブック.Saved Then MsgBox "対象ブックは保存済です。" End If If 対象ブック.Saved = False Then MsgBox "対象ブックは未保存の編集があります。" End If
サンプルコード
' マクロの実行前に保存確認 Sub サンプルマクロ() If Thisworkbook.Saved = False Then MsgBox "本ファイルを保存してから実行してください。" Exit Sub End If ' ~~ここからマクロ本文 End Sub
解説
WorkbookオブジェクトのSavedプロパティを調べることで、
そのブックが最後に保存されてから編集されているかを判定できます。
サンプルのように
「未編集状態で実行すべきでないマクロの実行確認」
などに使用できます。
ブックを閉じようとしたときの保存確認ウィンドウ
今回解説した「Savedプロパティ」は、
ブックを閉じようとしたときに出る↓のウィンドウと連動しています。

SavedがFalseだとこのウィンドウが出るということですね。
ここで注目すべきはSavedが「代入も可能なプロパティ」であることで、
SavedプロパティをTrueにすることでこのウィンドウをでなくすることが可能です。
たとえばログファイルや一時シートなどを生成するマクロにおいて、
Dim 一時シート As Worksheet Set 一時シート = Workbooks.Add.Worksheets(1) ' ~~ここで一時シートへの書き込み処理 一時シート.Parent.Saved = True
このようにSavedプロパティを最後にTrueにしてマクロを終えることで、
「そのまま閉じても問題ないけど確認用に残す作業シート」
のようなシートを、×を押しても保存確認が出ないように設定できます。
ちなみに↑のコードを実行可能なことで分かる通り、
新規に作成してまだ一度も保存していない未保存ブックであっても、
SavedをTrueにすれば「保存済」という状態にすることができます。
なかなか便利な仕様ですので、こういった実装をする方は覚えておきましょう。