和風スパゲティのレシピ

日本語でコーディングするExcelVBA

読取専用の推奨を無視して書込権限でブックを開く

ブックが「読み取り専用を推奨」の設定で保存されている場合は、
開くときに以下のメッセージが表示されます。

読取専用推奨メッセージ


このブックを「VBAから書き込み権限で開く」場合は、
OpenメソッドのIgnoreReadOnlyRecommendedをTrueにすればOKです。

Workbooks.Open "C:\Users\○○\Desktop\テスト\読取専用推奨ブック.xlsx" _
    , IgnoreReadOnlyRecommended:=True

これで読み取り専用を推奨するブックを書き込み権限で開くことができます。


加えて書き込みパスワードが設定されている場合は、
WriteResPasswordにパスワードを指定します。

Workbooks.Open "C:\Users\○○\Desktop\テスト\書込パスワード付ブック.xlsx" _
    , WriteResPassword:="1234", IgnoreReadOnlyRecommended:=True

このパスワードを指定していたとしても、読み取り専用推奨を無視するには、
IgnoreReadOnlyRecommended:=Trueが必要です
のでご注意ください。


なお、以下の方法ではいずれも失敗します。

' DisplayAlertsではダメ
Application.DisplayAlerts = False
Workbooks.Open "C:\Users\○○\Desktop\テスト\読取専用推奨ブック.xlsx"
Application.DisplayAlerts = True

' ReadOnlyをFalseにするのもダメ
Workbooks.Open "C:\Users\○○\Desktop\テスト\読取専用推奨ブック.xlsx" _
    , ReadOnly:=False

これらの方法ではいずれも「読取専用」で開かれてしまいます。


特に「ReadOnly:=False」ではダメというのは気を付けてください。

ReadOnlyはあくまで「Trueにすると読取専用になる」設定であり、
Falseにすると書込権限になる訳ではないということです。


逆に言うと、IgnoreReadOnlyRecommended:=Trueさえ指定すれば、
DisplayAlertsは切らなくても警告メッセージは表示されません。



また、この設定で開いたとしても別の理由で読取専用になることはあります。

当たり前ですが他の人が開いているブックを開いた場合は、
どうやって開いても読取専用
でブックが開かれます。


開いたブックが読取専用かどうかを調べる場合は、
開いた後でReadOnlyプロパティを調べてください。

' 読取専用の推奨を無視して開く
Dim 処理ブック As Workbook
Set 処理ブック = Workbooks.Open("C:\Users\○○\Desktop\テスト\読取専用推奨ブック.xlsx" _
    , IgnoreReadOnlyRecommended:=True)

' 開いてみて読取専用なら閉じる
If 処理ブック.ReadOnly Then
    処理ブック.Close False
    MsgBox "他のユーザーが作業中のため処理を中断しました。" & vbCrLf _
              & "しばらく待ってから再度実行してください。"
End If