和風スパゲティのレシピ

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

80本目:読み取り専用で保存できないブックにする

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(保存せず閉じる)を行うマクロの扱いには注意しましょう。