和風スパゲティのレシピ

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

ブックを読み取り専用にする - ChangeFileAccess

開いているブックを読み取り専用にするには、
WorkbookオブジェクトのChangeFileAccessメソッドを使用します。

' アクティブブックを読み取り専用にする
ActiveWorkbook.ChangeFileAccess xlReadOnly

 
既に読み取り専用になっている場合はエラーになってしまうため、
エラーを回避するにはReadOnlyプロパティを調べてから実行してください。

' ブックが読取専用でなければ読取専用にする
If ActiveWorkbook.ReadOnly = False Then
    ActiveWorkbook.ChangeFileAccess xlReadOnly
End If

 
ちなみにこのReadOnlyプロパティは読み取り専用プロパティのため、
これをTrueにすることでは読み取り専用の設定はできません。

以下のコードを実行しようとすると、 

ActiveWorkbook.ReadOnly = True
コンパイル エラー:
値の取得のみ可能なプロパティに値を設定することはできません。

エラーとなります。


また、ChangeFileAccessで読取専用を設定しようとした際、
対象のブックが編集されている場合は以下のメッセージが表示されます。

どちらを選択しても読取専用への変更は行われるため、
Saveメソッド(上書き保存)のように選択肢によってエラーになることはありません。


デフォルトは「はい」になっていることからわかるように、
DisplayAlertsを切って実行した場合は「保存してから読取専用に」変更されます。

Application.DisplayAlerts = False

' 警告OFF下で実行すると、未保存の編集があるブックでは上書き保存が実行される
ActiveWorkbook.ChangeFileAccess xlReadOnly

Application.DisplayAlerts = True

 
上書き保存を行わずに読取専用にしたい場合は、
編集中のフラグであるSavedプロパティをTrueにしてから実行してください。

' 編集があったとしても保存せずに保存済フラグをTrueにする
ActiveWorkbook.Saved = True

' これで上書き保存が実行されずに読取専用にできる
ActiveWorkbook.ChangeFileAccess xlReadOnly

この2つの仕様の違いには注意しておきましょう。