Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:読み取り専用で保存できないブックにする
#VBA100本ノック 80本目
このブックは変更してほしくないので、以下の動作にしたい。
・開かれたら読み取り専用に設定
・上書き保存や名前を付けて保存をしようとしたら、保存せずに強制的にブックを閉じる
・閉じる時の保存確認メッセージも出さない
※VBA作成中は気を付けて!
・読み取り専用による、以下のメッセージが出てしまうのは構いません。

◇ 出題ページはこちら
ソースコード
Thisworkbookモジュール
' 100本ノック080:読み取り専用で保存できないブックにする Private Sub Workbook_Open() If Me.ReadOnly = False Then Me.ChangeFileAccess xlReadOnly End If End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Cancel = True Me.Close SaveChanges:=False End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.Saved = True End Sub
解説
Thiswokrbookのイベントに関する問題です。
Open、BeforeSave、BeforeCloseに該当の処理を記述するだけですね。
コードの解説については特にありませんが、
実際にこのファイルを使う場合には最初に保存する方法が必要です。
一番簡単な方法としては、
Application.EnableEvents = False
これをイミディエイトウィンドウで実行し、
イベントを切ってからファイルを開くのが楽ですね。
せっかくコードを書いても保存されずに消えてしまうと大変なので、
Workbook.Close False(保存せず閉じる)を行うマクロの扱いには注意しましょう。