[VBA]M365に格納されるファイルのURLを取得する方法

Officeのクラウド化(M365)

Officeアプリケーションのクラウド化に伴い、OneDriveやTeams、SharePointなどのネットワーク上にあるファイルにアクセスする機会が多くなり、VBAを記述する際も、クラウド上のファイルにアクセスが必要です。

ファイルのありかの記述の変化(フォルダ階層からhttpsへ)

ファイルの格納場所は、これまではフォルダ階層で表記されていましたが、クラウド上のファイルについては、https://~ といったURLでの記述になります。このURLの取得方法に問題があり、非常に苦労しました。

共有用のURLとVBA用のURLが違う

検索やChatGPTでも出てこなかったので気が付くのに時間がかかりましたが、Teamsなどの…や右クリックで出てくる共有用のURLと、VBAで使用可能なURLが異なるようです。

Teamsなどで共有用に出てくるURLには、:x/ とか :r/など、アクセス権に係るURIが含まれていますが、これがあるとアクセスできたり出来なかったりして、アクセスできない場合は何故できないのかがわからなくなります。

VBAでアクセスするためのURLは、次の手順で取得することができます。

  • クラウドアプリケーション上のファイルを右クリックし、「開く」「アプリで開く」選択

  • Excelなどのアプリで「ファイル」「名前を付けて保存」を選択

  • 現在のフォルダをクリックしてファイル選択画面を開く

  • ファイル選択画面のアドレスバーをクリックして、表示されるURLを取得する

  • 取得したURLの最後に"/"を付ける

これがわかるまで、コード間違いなどいろいろ疑ってしまい、非常に時間を食ってしまいました。

それでも残るなぞ

 このURLを使い、Workbooks.OpenでExcel表を開くことができます。
 また、クラウド上のファイルなどについては、これまでの関数のDir()をつかうことができず、FileSystemObjectの.FileExistsや、.FolderExistsなどでファイルなどの存在を確認できるはずなのですが、こちらの動作がおかしい(ファイルやフォルダがあってもFalseになる)。
 ひょっとすると、この動作のためにもまた別のURL形式が必要なのでしょうか?インターネットの記事もいろいろと有りすぎて、クラウド上のファイルアクセス方法のどれが一体ただしいのか、さっぱりわかりません。ひょっとするとChatGPTの有料版(GPT-4)ならば教えてもらえるのかなぁ・・・

 どなたかわかる方がいらっしゃったら教えていただけるとありがたいです。


この記事が気に入ったらサポートをしてみませんか?