【VBA】読み取り専用でブックを開く

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)する必要がある。
  • ダイアログと組み合わせると汎用的なマクロになる。

コメント

タイトルとURLをコピーしました