1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Application.ThisWorkbook.Path は OneDrive/SharePoint で共有された Office ファイルの VBA からローカルパスを得る救世主になるのか

Posted at

はじめに

Excel VBA などで同一フォルダにあるファイルにアクセスしようとしたとき、その Excel がOneDrive/SharePoint で共有されたフォルダに存在すると、URL 形式のファイルパスしか得られず、苦労した人は少なからずいることと思います。

Qiita においてもどうにか回避しようとする記事が散見されます。

例に漏れず、私もいろいろ苦労し、先人のお知恵も拝借しつつ、結論としては「根本的にはムリ」となりました。組織内に利用する人が少ない場合には、VBA はアドインで共有し、それを利用するブックは個人ごとに作成する、という運用にしたこともあります。

もう数年にわたって悩んできたわけですが、今日、偶然、ローカルパスを拾うことに成功しました。
この界隈の悩める方々にとって救世主になるかもしれないので、情報共有いたします。

肝は Application.ThisWorkbook.Path

さっそく、次のスクリプトを実行してみます。

標準モジュール
Sub ローカルパスを得たい()
    Debug.Print ActiveWorkbook.Path
    Debug.Print Environ("OneDriveCommercial")
    Debug.Print Environ("OneDriveConsumer")
    Debug.Print Environ("OneDrive")
    Debug.Print Environ("UserProfile")
    Debug.Print Application.ThisWorkbook.Path
End Sub

結果です。

イミディエイト
https://kojimafarmXXXXXXXX.sharepoint.com/sites/core/Shared Documents/2025
C:\Users\khoji\OneDrive - 小島農園
C:\Users\khoji\OneDrive
C:\Users\khoji\OneDrive - 小島農園
C:\Users\khoji
C:\Users\khoji\小島農園\コア - ドキュメント

ActiveWorkbook.Path を始め、今まで試してきたさまざまなローカルパスを得るメソッドやプロパティは URL 形式になっちゃうんですが、なぜか Application.ThisWorkbook.Path は Windows ファイルシステムパス形式になっています。

おわりに

公式情報は見つけられていませんし、いろいろな環境で試したわけでもありません。
なので、他の方の環境で使えるかどうかわかりませんが、悩める皆さまが少しでも救われるといいな、と思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?