はじめに
SharePointやOneDriveのような、クラウドベースのネットワークで共有しているファイルにマクロでアクセスを試みると、ファイルにアクセスできずにエラーが発生します。
これはファイルパスがURL方式になっていることが原因なので、ファイルパスの形式変更を試みることでエラーを回避できます。
最近マクロを作るときには必ずセットでこの関数も実装する羽目になるので、同じ悩みを持っている方に関数をご紹介します。
こんな時に使える
- VBA で OneDrive / SharePoint / Box 等オンラインストレージ上のファイルにアクセスする
期待される動き
例えば、下記例のような二種類の文字列のうち、URLになっている方だけを加工してくれる関数が便利ですよね。
Sub entrypoint()
Debug.Print cnvNetPath2Local("C:\Users\NormalAccount\")
Debug.Print cnvNetPath2Local("http://servername/c/directoryname/")
End Sub
出力はというと。
C:\Users\NormalAccount\
\\servername\c\directoryname\
フォルダ名、ファイル名を扱う際、この加工をしておくと扱いが非常に楽になりますよね。
ソースコード
というわけで下記の通り。ここでは cnvNetPath2Local
という名前を付けています。
' cnvNetPath2Local
' ------------------------------------------------------------------------
' ファイルが開けないネットワークドライブを通常のフォルダパスに(強引に)変換する。
' 本メソッドではsなしを扱う
' OneDrive形式 : http://servername/c/sample/
' 通常の形式 : \\servername\c\sample\
'
Public Function cnvNetPath2Local(path As String) As String
If InStr(path, "http://") > 0 Then
' http:// で始まっている場合はスキーム定義部分を削除
cnvNetPath2Local = Replace(path, "http:", "")
Else
' 検出できない場合はそのままパスを返す
cnvNetPath2Local = path
End If
End Function
URL 形式の場合、スキーム文字列を削除するだけの動きです。
関数にするほどか?というレベルではありますが、地味に効いてきますのでよく使う関数群に入れておくことをお勧めします。
今後の課題
https:// も含めて回避できるようにするなどが課題ですが、https:// の共有フォルダに出会ってないので。必要性はわかりません。誰か知っていたら教えてください。