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