PR
スポンサーリンク

【ExcelVBA】ブックを読み取り専用で開く方法

スポンサーリンク
エクセルVBA-ブックを読み取り専用で開く_アイキャッチ ブックの操作
スポンサーリンク
スポンサーリンク
スポンサーリンク

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

マクロでファイルを開く時に、読み取り専用で開く方法について説明します。

普通にWorkbooks.Openでファイルを開くと、書き込みできる状態で開こうとします。
開きたいファイルを他の誰かが使用していたり、読み取り推奨設定がされていたりするとファイルを開く処理でエラーが発生してしまいます。

他のブックの値をチェックしたり、自ブックに反映したいだけであれば読み取り専用で開くようにしておけばエラーが発生せずにマクロを実行することができます。

マクロでブックを読み取り専用で開くには、Workbooks.Openの引数に「ReadOnly:=True」を指定して記述します。

‘ファイルを読み取り専用で開く

Workbooks.Open "C:\…ブックA.xlsx", ReadOnly:=True

実務ではファイルを開く時にWorkbook変数にセットして開くことが多いです。
その場合は↓のようにカッコ()で閉じて「ReadOnly:=True」を指定します。

‘ファイルを開く時に変数にセットして開く

Dim TargetFile As Workbook
Set TargetFile = Workbooks.Open("C:\…ブックA.xlsx", ReadOnly:=True)

スポンサーリンク

ブックを読み取り専用で開いて値を転記するサンプルマクロ

ファイルを読み取り専用で開く処理のサンプルマクロを紹介します。

マクロブックのSheet1のA1セルには開きたいファイルのパスが書いてあります。

エクセルVBA-マクロ実行前の状態

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

エクセルVBA-ブックAの状態

マクロで実行している内容
①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セルに「こんにちは」と転記されていることが分かります。

エクセルVBA-マクロ実行後の状態

これだけだと本当に読み取り専用で開かれたのかが分からないので、ステップ実行でファイルが開かれたところを確認してみます。

Workbooks.Openの直後で中断したキャプチャです。
ブックA.xlsxが[読み取り専用]で開かれていることが分かります。

エクセルVBA-マクロを途中で中断した状態
スポンサーリンク

※コードのコピー利用について

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

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