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