ワークブックを読み取り専用で開く

にメンテナンス済み

VBA を使ってワークブックを操作している時、他のワークブックから情報を取得したい場合があります。

その時、他のワークブックを読み取り専用で開くことで、データの誤っての変更を防ぎながら、必要な情報を表示・取得することができます。

このページでは、VBA を使ってワークブックを読み取り専用で開く方法を紹介します。

ワークブックを読み取り専用で開く

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

Workbooks.Open(ReadOnly:=True)

以下のコードは、ユーザーのドキュメントフォルダにある sample.xlsx を読み取り専用で開く例です。


Dim wb As Workbook, path As String

' ユーザーのドキュメントフォルダ
path = Environ("USERPROFILE") & "\Documents\sample.xlsx"

' ワークブックを読み取り専用で開く
Set wb = Workbooks.Open(path, ReadOnly:=True)

' ワークブックを閉じる
wb.Close

注意点

読み取り専用で開いたワークブックは、保存する際に元のファイルを上書きすることはできません。別名で保存する必要があります。

パスが正しくない、またはアクセス権限がない場合、ワークブックは開かれません。適切なエラーハンドリングを行うことをお勧めします。

以下のコードは、エラーが発生した時にすでにワークブックを開いていた場合、ワークブックを閉じる例です。

Public Sub OpenReadOnlyWorkbook()
  On Error GoTo ErrorHandler

  Dim wb As Workbook, path As String

  ' ユーザーのドキュメントフォルダ
  path = Environ("USERPROFILE") & "\Documents\sample.xlsx"

  ' ワークブックを読み取り専用で開く
  Set wb = Workbooks.Open(path, ReadOnly:=True)

  ' 何らかの処理

  ' ワークブックを閉じる
  wb.Close

  Exit Sub

ErrorHandler:

    ' すでにワークブックを開いていた場合、閉じる
    If Not wb Is Nothing Then
        wb.Close
    End If

    MsgBox "エラーが発生しました。"

End Sub

まとめ

VBA を使って Excel のワークブックを読み取り専用で開く方法を紹介しました。

前述したサンプルコードを参考に、ニーズに合わせてカスタマイズしてください。

#Excel #VBA