指定パスのブックを存在をチェックして起動する。OneDriveの影響も考慮。 Excel VBA
- yuji fukami
- 16false49 GMT+0000 (Coordinated Universal Time)
- 読了時間: 2分
<概要>
この「OpenBookWithCheck」は、指定したフルパスのExcelブックが存在するかを先に確認し、存在する場合のみ安全に起動するための汎用プロシージャです。単に Workbooks.Open を直書きするのではなく、**よく使う引数だけに絞った“使いやすい起動関数”**として整理しています。

ポイントは3つです。
1つ目「起動前の存在チェック」
別プロシージャの FileExists を使って、ブックが見つからない場合は False 相当(= Workbook を返さず終了)にし、必要ならメッセージ表示もできます。
「パス間違い」「ファイル移動」「共有フォルダの参照ミス」など、現場で頻発する原因を早い段階で切り分けられます。
2つ目「最低限の引数」
Application.Workbooks.Openは引数が多くて分かりづらく、結果的に使いづらいです。なのでOpenBookWithCheckでは実務で変更する頻度が高い引数だけ(UpdateLinks / ReadOnly)に限定しています。
「リンク更新するか」「読み取り専用で開くか」だけを意識すればよいので、呼び出し側のコードがスッキリし、保守もしやすくなります。
3つ目「OneDriveの悪影響回避」
3つ目が本プロシージャの大きな特徴で、OneDrive 起因で「読み取り専用(ReadOnly=True)だとブックが開けない」ケースの回避処理を組み込んでいます。この現象は 2025年12月16日時点で、直近約1か月間に確認されている挙動です。
まず読み取り専用で開く → 失敗した場合はエラー内容をログに出しつつ、**読み取り専用を解除して再試行(ReadOnly=False)**します。それでも起動できない場合は、OneDrive 同期停止などの対処を促すメッセージを表示し、ユーザー側の対応へスムーズに誘導します。
結果として、**「存在確認 → 起動 → OneDrive トラブル時の自動リカバリ」**までを1本にまとめた、実運用向けの堅牢なブック起動テンプレートとして使えるプロシージャです。
<実行例>
実行例のサンプルコードは次の通りです
<関連コード>
今回の汎用プロシージャは、下記の別で紹介している汎用プロシージャを使用しています。
・FileExists → https://www.softex-celware.com/post/fileexists
<関連記事>
今回紹介しているような汎用プロシージャを部品として一元管理する方法は別記事で紹介していますので、是非このノウハウも参考にしてみてください。
コーディングを効率化する上でどんどん増やしていった汎用プロシージャ(部品)をいくら増やしても簡単に流用ができるような仕組みの構築が可能になります。


コメント