5
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VBA で OneDrive / SharePoint のファイルにアクセス

Last updated at Posted at 2021-12-29

はじめに

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:// の共有フォルダに出会ってないので。必要性はわかりません。誰か知っていたら教えてください。

5
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?