logo image

OneDriveフォルダ内で実行した場合、ThisWorkbook.Pathの結果がローカルのパスではない。

Icon representing a data.
2021-12-25
Icon show updated_at
2021-12-25
1
Twitter icon.
windows
Excel
vba
Microsoft365
OneDrive

前提条件

OneDrive内に配置したBook内でVBAを実行する。

現象

以下のコードを実行すると、URL形式でパスが返却される。

Debug.print ThisWorkbook.path

表示結果(以下の「X」は、登録ユーザーごとに異なる)

https://X.sharepoint.com/personal/X/Documents/[OneDrive内のbookパス]

このパスをプログラム内で利用するとエラーメッセージが表示される。

エラーログ・エラーメッセージ

パスが見つかりません。

原因

OneDrive内で実行した場合、URL形式でパスが返却される。

対応

Environ("OneDriveCommercial")、Environ("OneDriveConsumer")の環境変数でローカルのパスを取得し、URL形式部分をローカルパスで置換する。


'環境変数からOneDriveのローカルパスを取得するためのキー。
' 個人の場合、"OneDriveConsumer"。
Private Const P_ENV_ONEDRIVE_TYPE As String = "OneDriveCommercial"

Public Function getBookDirPath (book As Workbook) As String
   
  'url形式でない場合、処理を終了
  getBookDirPath = book .path & "\"
 If InStr(getBookDirPath , "https:") < 1 Then Exit Function

  'urlの区切りをOSのパス区切りに変換
  Dim urlPath As String
  urlPath = Replace(book .path, "/", "\")
  
  'urlのDocumentsまでが置換対象になるので、その場所を取得
  Dim pointKey As String, pointLength As String, keyPoint As Long
  pointKey = "\Documents\"
  pointLength = Len(pointKey)
  keyPoint = InStr(urlPath, pointKey) + pointLength - 1
  
  'Documentsまでの置換対象を取得し、環境変数から取得したローカルパスで置換
  Dim unnecessaryPart As String
  unnecessaryPart = Mid(urlPath, 1, keyPoint) '置換対象取得
  getBookDirPath = Replace(urlPath, unnecessaryPart, Environ(P_ENV_ONEDRIVE_TYPE )) & "\"

End Function
  
フリーランスプログラマーです。
Area to place ads.
Area to place ads.
Comments
この記事にコメントはまだありません。

開発環境 ライブラリ ツール

windows
Excel
vba
Microsoft365
OneDrive
フリーランスプログラマーです。