Excel VBAでは、Workbooks.Open
メソッドの ReadOnly
引数を使うことで、ブックを読み取り専用で開くことができます。
読み取り専用で開くと、元のファイルを直接上書きすることがなく、安全に閲覧やコピーを行うことが可能です。
1. 読み取り専用で開く基本コード
Sub OpenWorkbookReadOnly()
Workbooks.Open _
Filename:="C:\Users\Public\Sample.xlsx", _
ReadOnly:=True '読み取り専用で開く
End Sub
解説:
ReadOnly:=True
… ファイルを読み取り専用モードで開く指定- これにより、上書き保存はできず、別名での保存が必要
2. 変数を使って読み取り専用で開く
Sub OpenWorkbookReadOnlyToVariable()
Dim wb As Workbook
Set wb = Workbooks.Open( _
Filename:="C:\Users\Public\Sample.xlsx", _
ReadOnly:=True)
'開いたブックのセルにデータを書き込む(元ファイルは変更されない)
wb.Sheets(1).Range("A1").Value = "テスト"
End Sub
解説:
Set wb = Workbooks.Open(...)
でブックを変数wb
に保持。- 編集はできるが、上書き保存(
Save
)はできない。別名保存(SaveAs
)が必要。
3. 読み取り専用で開く前に確認する例
ユーザーが指定したファイルを読み取り専用で開く場合、ファイル選択ダイアログを組み合わせると便利です。
Sub OpenWorkbookReadOnlyWithDialog()
Dim filePath As Variant
filePath = Application.GetOpenFilename( _
FileFilter:="Excelファイル (*.xlsx; *.xlsm), *.xlsx; *.xlsm")
If filePath <> False Then
Workbooks.Open Filename:=filePath, ReadOnly:=True
MsgBox "ファイルを読み取り専用で開きました。"
Else
MsgBox "キャンセルされました。"
End If
End Sub
解説:
Application.GetOpenFilename
… ファイル選択ダイアログを表示。- 選ばれたファイルを
ReadOnly:=True
で開く。
4. 読み取り専用かどうか確認する
開いたブックが読み取り専用かどうかを確認するには、ReadOnly
プロパティを使います。
Sub CheckIfReadOnly()
Dim wb As Workbook
Set wb = Workbooks.Open( _
Filename:="C:\Users\Public\Sample.xlsx", _
ReadOnly:=True)
If wb.ReadOnly Then
MsgBox wb.Name & " は読み取り専用です。"
End If
End Sub
5. まとめ
ReadOnly:=True
を指定することで安全にブックを開ける。- 編集後は必ず別名で保存(
SaveAs
)する必要がある。 - ダイアログと組み合わせると汎用的なマクロになる。
コメント