ブックが読取専用か判定するには、
WorkbookオブジェクトのReadOnlyプロパティを判定します。
Dim wb処理ブック As Workbook Set wb処理ブック = Workbooks("テストブック.xlsx") If wb処理ブック.ReadOnly Then ' ここに読取専用だった場合の処理 End If
特に「開いたファイルが読み取り専用かどうか」を調べる際に使用することが多いでしょう。
Dim ファイルパス As String ファイルパス = "C:\Users\wfsp\Desktop\テストブック.xlsx" Dim wb処理ブック As Workbook Set wb処理ブック = Workbooks.Open(ファイルパス) ' 開いたブックが読み取り専用になってしまった場合は閉じる If wb処理ブック.ReadOnly Then wb処理ブック.Close False MsgBox "対象のブックが読取専用で開かれたため処理を中断します。" Exit Sub End If
なお、このReadOnlyプロパティは読み取り専用プロパティで、
このプロパティに代入して読み取り専用の設定を変更することはできません。
' どちらのコードもエラー wb処理ブック.ReadOnly =True wb処理ブック.ReadOnly =False
上記のコードを実行しようとすると、
| コンパイル エラー: 値の取得のみ可能なプロパティに値を設定することはできません。 |
エラーとなります。
読取専用の設定を変更するには、
WorkbookオブジェクトのChangeFileAccessを編集します。
wb処理ブック.ChangeFileAccess xlReadOnly ' 読み取り専用にする wb処理ブック.ChangeFileAccess xlReadWrite ' 読み取り専用を解除する
といいつつChangeFileAccessはちょっと癖のあるメソッドなため、
Workbooks.Openで開きなおした方が良い場合も多いです。
詳しくはこちらの記事をご覧ください。