<概要>
今回は、OneDriveのhttp形式のパスをローカル上のパスに変換する汎用プロシージャを紹介します。
OneDriveを起動中だとThisWorkbook.Path(ThisWorkbookが保存されているフォルダのフルパス)の値がhttp形式になってしまうのですが、これをDir関数やFileSystemObjectで認識できるようなローカルパスに変換する処理です。
この対策がないVBAコードだと、マクロ付ブックを使用するたびにOneDriveを終了させておく必要があるため作業において非常に手間が生じてしまいます。紹介する汎用プロシージャによってそのような手間を回避することができます。
ただ、紹介する汎用プロシージャはOneDriveの契約形式などで通用しないため完璧な方法ではありません。これに関しては現在調査中です。
<用途>
OneDriveが実行中だとhttp形式になってしまったThisWorkbook.PathをVBAで認識できるローカルパスに変換する
<プロシージャ紹介>
Public Function ConvOneDrivePath_LocalPath(Path As String) As String
名前: ConvOneDrivePath_LocalPath /Functionプロシージャ
説明: OneDriveのhttp形式のパスをローカル上のパスに変換する
'引数
'Path・・・変換対象のフォルダパス
<実行例>
次のようなコードを用意します。
Public Sub Test_ConvOneDrivePath_LocalPath()
Dim Path As String
Path = ThisWorkbook.Path
Debug.Print Path
Path = ConvOneDrivePath_LocalPath(Path)
Debug.Print Path
End Sub
実行するとイミディエイトウィンドウに次のような結果が表示されます。
機密情報に当たるところはぼかしてありますが、結果http形式のパスがローカルパスに変換されています。
<サンプルファイル>
<コード>
Public Function ConvOneDrivePath_LocalPath(ByRef Path As String) As String
'OneDriveのhttp形式のパスをローカル上のパスに変換する
'20231218
'https://d.docs.live.net/********/作業フォルダ/2023年/12月/Book.xlsm
'↓
'C:/Users/[ユーザー名]/OneDrive/作業フォルダ/2023年/12月/Book.xlsm
'参考
'https://www.softex-celware.com/post/ConvOneDrivePath_LocalPath
'引数
'Path・・・変換対象のフォルダパス
'処理
Dim Output As String
Dim TmpSplit As Variant
If Path Like "http*" Then
'パスがhttpから始まるので変換の必要あり
TmpSplit = Split(Path, "/") '「/」で分割
TmpSplit(0) = ""
TmpSplit(1) = ""
TmpSplit(2) = ""
TmpSplit(3) = Environ("OneDrive")
Output = Join(TmpSplit, "\") '\で結合する
Output = Mid(Output, 4)
Else
'変換の必要なし
Output = Path
End If
'出力
ConvOneDrivePath_LocalPath = Output
End Function
Comments