今回は、OneDrive(ワン・ドライブ)に保存したExcelファイルのVBAでフルパスが取得できない時の対処法についてのお話です。
まず、OneDriveというのはマイクロソフト社が無料で提供している
「インターネット上にファイルを保管できるサービス」のことを言います。
OneDriveにファイルを保存しておけば、外出先からでもそのファイルを編集できちゃうとっても便利なサービスなんです。
そんな便利なOneDriveですが、ExcelなどのVBAを実行するとフルパスが取得できないというトラブルに見舞われることがあるんですね。
フルパスが取得できないと非常に困ることが多いのでそんな時の対処法についてのお話です。
それでは早速本編へ行ってみましょう!!!
目次を使って読みたい項目へ
フルパスが取得できない原因
まず、症状について確認してみましょう。
今回は、テスト用の実験ファイルを用意してみました。
こんな風にOneDriveに保存(アプリで自分のパソコンに保存)してフルパスを取得しようとすると「https://d.docs.live.net/~」と表示されてしまうんですね。
本当は、こんな風に「C:¥Users¥パソコンの名前¥Desktop」のようにローカル(自分のパソコンのファイルの場所)のフルパスを取得したいんですよね。
じゃあ、どうしてパスではなくURLを取得しちゃうんでしょ?
どうにも原因は、ココにあるようです。
コレは、オンライン版のOneDriveで同じファイルを開いた結果です。
URLを見て下さい。何か気づきませんか?
そう、「onedrive」と「d.docs」という部分意外全く同じURLですよね。
そうなんです。
なぜかOneDrive(アプリ版)に保管したファイルから、フルパスを取得しようとすると、ローカルではなくWeb版のフルパスを取得しちゃうんです。
これ、メッチャ困るんですよね。
どうしてか?
例えば、今開いているファイルを自動的にデスクトップに保存したい時があるとしましょう。
そういう時は、フルパスを取得して自分のファイル名を加工し、なおかつデスクトップに保存する。
なんてことをやりたいんですが、デスクトップの位置は「C:¥Users¥パソコンの名前¥Desktop」です。
ポイントは「パソコン名」なんですが、これはパソコンによって違います。
ただ、フルパスを取得すればパソコン名が何であっても、その都度取得できるので問題無いんです。
しかし、これがURLになってしまうと当然エラーになるので大きな問題になるという訳なんです。
そもそもパスじゃないですからね。
じゃあ、どうすれば良いのか? 対策方法を見ていきましょう。
OneDrive上でフルパスを取得する方法
OneDriveに保存した状態でフルパスを取得するコードは次の通りです。
Sub フルパス対策()
Dim Path As String
If Left(ThisWorkbook.Path, 5) = "https" Then
Path = Environ("UserProfile") & "\OneDrive"
Else
Path = ThisWorkbook.Path
End If
MsgBox Path
End Sub
すごく単純な対策方法ですが、このコードを簡単に説明すると
取得したフルパスが「https」から始まっていた場合は、パソコンに教えてもらったパスに「OneDrive」というパスを繋げてフルパスに修正してね。
というコードです。
コレだと分かりにくいのでコードの解説をしましょう。
Sub フルパス対策()
Dim Path As String
If Left(ThisWorkbook.Path, 5) = "https" Then
Path = Environ("UserProfile") & "\OneDrive"
Else
Path = ThisWorkbook.Path
End If
MsgBox Path
End Sub
ハイライト部分について解説します。
If Left(ThisWorkbook.Path, 5) = “https” Then
Path = Environ(“UserProfile”) & “\OneDrive”
コレを日本語で説明すると、
もし、このブックのパスの左から5文字が、「https」だったら
Pathという変数に「UserProfile(ユーザープロファイル)」という環境変数から取得したパスに「\OneDrive」という文字を繋いでね。
という意味になります。
このとき「UserProfile」から取得したパスは、「C:\Users\コンピュータ名」まで返してくれるのでそれに「\OneDrive」を繋げてフルパスにしています。
「環境変数」とは、OSが持っている変数のことを言います。
今回の場合、「UserProfile」という変数には何が入っているの?
とOSに聞いた結果「C:¥Users¥コンピュータ名」というパスが入っているよと教えてくれたので、教えてもらったパスの最後にOneDriveのパスをくっつけてフルパスに加工しています。
更に「Environ(“UserProfile”)」という部分は、Environ(エンバイロン)という環境変数を取得するための関数でパスを取得しています。
要は、Environ(“環境変数名”)とすることでパスを取得できたという訳ですね。
最後の「Path = ThisWorkbook.Pass」は、取得したパスが「https」で始まっていなければ、Pathという変数にこのブックのパスを入れてねという意味です。
今回、検証用のファイルはOneDriveの直下(OneDriveを開いてすぐのフォルダ)に保存して検証しています。
もっと深い階層(色々なフォルダの中にある)の場合は、違う工夫が必要になるので注意して下さい。
まとめ
さて、今回のVBAでOneDriveのフルパスが取得出来ない時の解決法はいかがでしたか?
この現象はある日突然起こりました。
今まで普通に動いていたプログラムが突然エラーを表示して使えなくなってしまったんです。
散々調べた結果。
OneDriveがアップデートされた時に問題が発生するようになったようです。
同じトラブルで悩んでいる方は、参考にしてみて下さい。
今まで順調に動いていたプログラムが突然止まるのは、ゾッとしますよね。
そんな時の参考にしてもらえれば嬉しいです。
最後まで読んでいただきありがとうございました。
それじゃあ、次回また会おう!!
そんじゃね。
フルパス修正応用編 【OneDriveのどこでもフルパスを修正する方法】へ進む ▶
ありがとうございます!
ファイルを開くだけならURLでもいけたのですが、csvの作成となるとエラーが表示されていたので
参考させて頂いた内容でうまくいきました!
suzuさん
コメントいただきありがとうございます。
お役に立てたようで何よりです。
これからも、役立つ記事を書いていきたいと思います。
よろしくお願い致します。