top of page
執筆者の写真yuji fukami

OneDriveのhttp形式のパスをローカル上のパスに変換

更新日:1月17日


<概要>


今回は、OneDriveのhttp形式のパスをローカル上のパスに変換する汎用プロシージャを紹介します。


OneDriveを起動中だとThisWorkbook.Path(ThisWorkbookが保存されているフォルダのフルパス)の値がhttp形式になってしまうのですが、これをDir関数やFileSystemObjectで認識できるようなローカルパスに変換する処理です。


この対策がないVBAコードだと、マクロ付ブックを使用するたびにOneDriveを終了させておく必要があるため作業において非常に手間が生じてしまいます。紹介する汎用プロシージャによってそのような手間を回避することができます。


ただ、紹介する汎用プロシージャはOneDriveの契約形式などで通用しないため完璧な方法ではありません。これに関しては現在調査中です。



<用途>




<プロシージャ紹介>


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形式のパスがローカルパスに変換されています。



<サンプルファイル>




<コード>


 Gist

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


閲覧数:1,549回0件のコメント

最新記事

すべて表示

Comments


bottom of page