和風スパゲティのレシピ

日本語でコーディングするExcelVBA

ブックが保存済みか調べる - Savedプロパティ

ブックが保存済みかどうか(最後に保存してから編集があったかどうか)
を判定する方法を紹介します。

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にすれば「保存済」という状態にすることができます。


なかなか便利な仕様ですので、こういった実装をする方は覚えておきましょう。