ワークブックを読み取り専用で開く方法
マクロでファイルを開く時に、読み取り専用で開く方法について説明します。
普通にWorkbooks.Openでファイルを開くと、書き込みできる状態で開こうとします。
開きたいファイルを他の誰かが使用していたり、読み取り推奨設定がされていたりするとファイルを開く処理でエラーが発生してしまいます。
他のブックの値をチェックしたり、自ブックに反映したいだけであれば読み取り専用で開くようにしておけばエラーが発生せずにマクロを実行することができます。
マクロでブックを読み取り専用で開くには、Workbooks.Openの引数に「ReadOnly:=True
」を指定して記述します。
実務ではファイルを開く時にWorkbook変数にセットして開くことが多いです。
その場合は↓のようにカッコ()で閉じて「ReadOnly:=True
」を指定します。
ブックを読み取り専用で開いて値を転記するサンプルマクロ
ファイルを読み取り専用で開く処理のサンプルマクロを紹介します。
マクロブックのSheet1のA1セルには開きたいファイルのパスが書いてあります。

ブックA(開くファイル)のSheet1のA1セルには「こんにちは」と書いてあります。

マクロで実行している内容
①A1セルに書いてあるファイルパスを変数にセットする
②読み取り専用でファイル(ブックA)を開く
③開いたブックのA1セルの値を自ブックのA3セルに転記する
④開いたファイルを閉じる
⑤ワークブック変数を初期化する
Sub Sample1()
Dim FilePath As String
Dim TargetFile As Workbook
'シートに書いてあるファイルパスを変数に設定…⓵
FilePath = ActiveSheet.Range("A1")
'読み取り専用でファイルを開く…⓶
Set TargetFile = Workbooks.Open(FilePath, ReadOnly:=True)
'開いたブックのA1セルの値を自ブックのA3セルに転記する…⓷
ThisWorkbook.Worksheets(1).Range("A3") = TargetFile.Worksheets(1).Range("A1")
'開いたファイルを閉じる…⓸
TargetFile.Close
'変数の初期化…⓹
Set TargetFile = Nothing
End Sub
↓マクロ実行後の状態
A3セルに「こんにちは」と転記されていることが分かります。

これだけだと本当に読み取り専用で開かれたのかが分からないので、ステップ実行でファイルが開かれたところを確認してみます。
Workbooks.Openの直後で中断したキャプチャです。
ブックA.xlsxが[読み取り専用]で開かれていることが分かります。

※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。