[ Excel-VBA ] ファイルの保存を禁止するマクロを保存できない罠 ( Workbook_BeforeSave Cancel )

Pocket

ここでは、ファイルの保存を一切禁止するマクロを書いてもそのマクロ自体が保存できない罠にはまったので備忘録を残しておきます。OKWave にテキストだけの解決方法が載っていましたが、わかりやすいようにキャプチャ画像付で説明しています。

スポンサーリンク

ファイルの保存を一切禁止するサンプル

エクセルファイルの保存を禁止する VBA サンプルになります。WorkbookBeforeSave イベントを追加し、Cancel パラメータに True を設定することで、一切のファイルの保存を禁止することができます。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  
  ' ファイルの保存を一切できないようにする
  Cancel = True
  
End Sub

この状態で [ Ctrl + s ] など保存操作を行っても一切保存できないことが確認できます。そこまではよいのですが、BeforeSave イベントに追加したスクリプトも保存することができません。このまま保存せずにファイルを閉じると保存操作をキャンセルする VBA マクロ自体が消えてしまいます。

困りました。困りました。困りました。困りました。

デバッガを使って保存する

一番簡単に保存するには、デバッガを使用します。以下のキャプチャ画像を確認してください。

  1. 保存操作を行う
  2. Cancel = True にブレークポイントを設定し、ブレーク
  3. End Sub まで処理を進める ( Shift + F8 ステップオーバー )
  4. ウォッチ式で Cancel の値を True から False に変更
  5. 実行再開 ( F5 )

の手順でマクロ自体を保存することができます。デバッガを使って、キャンセルをキャンセルします。

悪手です

前任者から引き継いだエクセルマクロを修正したとしても、後任者がこの仕様を知らなければ悲惨です。保存されていると思って書いたマクロがファイルを閉じたと同時に消えます。10分作業ならまだよいかもしれませんが、何時間も掛けて修正していた場合はどうでしょうか。

常にメッセージダイアログを出して保存できないことを強調しているのであれば、後任者も気づきますのでまだ良いかもしれませんが、何事もなかったように保存をキャンセルするサンプルのような処理はやめたほうが良いでしょう。後任者に怨まれてしまいます。

スポンサーリンク


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>