和風スパゲティのレシピ

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

ブックを読み取り専用で開く - ReadOnly

ブックを読み取り専用で開くには、
Workbooks.Openの引数ReadOnlyにTrueを指定します。

Workbooks.Open "C:\Users\wfsp\Desktop\テストブック.xlsx", ReadOnly:=True

' 変数に入れる場合
Dim ファイルパス As String
ファイルパス = "C:\Users\wfsp\Desktop\テストブック.xlsx"

Dim wb読取ブック As Workbook
Set wb読取ブック = Workbooks.Open(ファイルパス, ReadOnly:=True)

 
ただし既に開いているファイルに対して実行しても、
エラーにはならず、かつ読取専用にはなってくれません。


確実にブックを読取専用にしてから処理を行いたい場合は、
開いている場合はいったん閉じてから読取専用で開き直すか、

Sub ブックを読取専用で開く()

    If Isブックを開いている("テストブック.xlsx") Then
        Workbooks("テストブック.xlsx").Close False
    End If
    
    Dim ファイルパス As String
    ファイルパス = "C:\Users\wfsp\Desktop\テストブック.xlsx"
    
    Dim wb読取ブック As Workbook
    Set wb読取ブック = Workbooks.Open(ファイルパス, ReadOnly:=True)
    

End Sub

Function Isブックを開いている(判定ブック名 As String) As Boolean

    Dim wb As Workbook
    For Each wb In Workbooks
    
        If wb.Name = 判定ブック名 Then
            Isブックを開いている = True
            Exit Function
        End If
        
    Next
    
End Function

 
あるいはWorkbookオブジェクトのChangeFileAccessメソッドを使用して、
開いたままブックを読み取り専用に変更してください。

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

 

詳細はこちらの記事をどうぞ