[ Excel-VBA ] エクセル終了時、保存確認ダイアログを出力しない ( ThisWorkbook.Saved )

Pocket

エクセルブックが更新されている状態でエクセルを閉じようとすると保存するか、しないかを確認するダイアログが 出力されます。保存忘れには役立ちますが、邪魔になるときもあります。

スポンサーリンク

保存確認ダイアログ

保存確認ダイアログ

ここでは、このダイアログの出力を制御するサンプルを掲載しています。

イベントハンドラの登録 ( Before_Close )

今回は、ブックの終了前に発生する Before_Close イベントを使用します。 イベントハンドラを作成し、メッセージを出力するだけのスクリプトを実行してみます。Excel の保存確認ダイアログが出力されるタイミングを確認するためです。

'
' Excel ブックが閉じる前に発生するイベント
'
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    MsgBox ("閉じようとしています")

End Sub

次に、ブックを更新します。どのような修正でも構いませんが、保存がされていない状態で実行します。すると、以下の順序でダイアログが出力されます。

1.Before_Close イベント

2.エクセルの保存確認

これで、エクセルの保存確認は、Before_Close イベントの後に処理されていることがわかります。(当然と言えば当然ですが)

Excel による保存確認ダイアログの出力を制御

Before_Close イベントで、ThisWorkbook.Saved プロパティに True を設定することでエクセルに対して、既に保存処理は完了しているため、保存確認ダイアログを出力する必要はないと判断させることができます。ただし、実際に保存処理が行われるわけではないので、ケースに応じて保存処理を VBA でする必要があります。サンプルスクリプトは以下の通りです。

'
' Excel ブックが閉じる前に発生するイベント
'
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    ' このコードでExcelに保存したと思わせることができる
    ' 従ってExcelが保存確認ダイアログを出力することはない
    ' ただし、実際に保存されるわけではないので注意が必要
    ThisWorkbook.Saved = True

    ' 実際に保存したい場合は、このように保存するように記述しなければならない
    'ThisWorkbook.Save

End Sub

これで、エクセルはファイルの保存確認ダイアログを出力しなくなります。

スポンサーリンク


Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>