和風スパゲティのレシピ

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

ブックが読み取り専用か判定する - ReadOnly

ブックが読取専用か判定するには、
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で開きなおした方が良い場合も多いです。


詳しくはこちらの記事をご覧ください。