開いているブックを読み取り専用にするには、
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つの仕様の違いには注意しておきましょう。