Excel ファイルの VBA が OneDrive 同期対象のローカルフォルダーにあると、それがうまく動かないことがある。色々調べてみたところ、原因は ThisWorkbook プロパティにある模様。このプロパティが自分自身のファイルのパスを返すときの値が、URL 形式になっていた。
これを解決するために、OneDrive の設定画面にて「Office アプリケーションを使用して、開いている Office ファイルを同期する」を無効にした。すると、問題のThisWorkBook プロパティがローカルフォルダーの値を返すようになり、それを含むVBA がうまく動くようになった。
Excel ファイルの VBA が OneDrive 同期対象のローカルフォルダーにあると、それがうまく動かないことがある。しかし同ファイルを OneDrive 同期の対象としていないフォルダーに移してから実行すると、うまくいくようになる。しかし本当ならOneDrive 同期対象のフォルダーに置いたまま、この VBA を実行したい。
その VBA を実行しようとしたときにでるエラー
(実行時エラー ’52’: ファイル名または番号が不正です。)
イミディエイトウィンドウにて ThisWorkbook プロパティが返す値
?ThisWorkbook.Path
https://d.docs.live.net/(略)/ドキュメント/(以下略)
- OS: Windows 10 Rro バージョン1909
- MS Excel: Microsoft Excel for Microsoft 365 MSO (16.0.13029.202329) 64 ビット
このプロパティが自分自身のファイルのパスを返すときの値がURL 形式になっているために、うまくいかなかった模様。
これを解決するために、OneDrive の設定画面を開いて、[Office] タブの「Office アプリケーションを使用して、開いている Office ファイルを同期する」を無効にした。
そのExcel ファイルを開いていた場合、いったん Excel を再起動する。
元のOneDrive 同期対象のフォルダーに置いたままこの VBA を実行しても、エラーが出ずにうまく実行できるようになった。
このときイミディエイトウィンドウにてThisWorkbook プロパティが返す値:
?ThisWorkbook.Path
C:Users(略)OneDriveドキュメント(以下略)
OneDrive の設定画面で「Office アプリケーションを使用して、開いている Office ファイルを同期する」設定をオフにすると、MS Office のファイルを他のユーザーと同時に作業するという場合には、当然ながら弊害が出る模様。