[VBA]エクセルの保存を禁止する方法

やりたいこと

・個人情報を扱うツールで、情報が残らないように保存を禁止したい
・ツールを閉じるとき、毎回「変更を保存しますか」と表示されるのがうっとおしい

ソースコード

保存を禁止する

' イベント:保存時
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Call MsgBox("個人情報保護のため、当ブックを保存することはできません")
    Cancel = True
End Sub

 

ファイルを閉じる際の「変更を保存しますか」を表示しない

' イベント:ブックを閉じる
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' ブックを「保存済み」とみなし、「変更を保存しますか」の確認ダイアログを表示させない
    ThisWorkbook.Saved = True
End Sub

 

開発者側で保存をしたい場合

イベントを一時的にコメントアウトするでもいいが、コメントアウト→戻すが手間であるため、以下のコードを用意。

Private Sub ForceSave()
    ' イベントを切って通常保存をかける
    Application.EnableEvents = False
    ThisWorkbook.Save
    Application.EnableEvents = True
End Sub

 

読み取り専用を設定しないのか

読み取り専用に設定すると、Ctrl + Sとした際に、「読み取り専用のため保存できません。別名で保存をしてください~」と長ったらしいメッセージが表示されてしまう。
かつ、ファイル保存画面に遷移してしまうのがイヤなので、特に読み取り専用は設定しない。

 

参考サイト

ブック保存する前に処理実行する【Workbook_BeforeSave】【ExcelVBA】 | VBA Create

Workbook.BeforeSave イベント (Excel) | Microsoft Learn

【Excel VBA】「変更を保存しますか?」と聞かれずに、ブックを自動で閉じる方法|morinokabu

Workbook.Saved プロパティ (Excel) | Microsoft Learn