非プログラマーでもできる!業務の自動化

【Excel VBA】OneDriveで動かない!ファイルパスを取得する関数「GetFullPath」の使い方と解説

当ページのリンクの一部に広告が含まれています。

課題・悩み「OneDriveフォルダを対象にVBAマクロを実行するとエラーが出る」

解決策「Excel VBAを使ってファイルパスを動的に取得する方法」を解説

クラウドストレージサービスの普及に伴い、Excel VBAでもOneDriveに保存されたファイルを扱う機会が増えています。

しかし、OneDriveのパスを使用するとエラーが発生することが多く、その原因を理解して適切に対処することが重要です。

この記事では、Excel VBAでOneDriveパスを使用する際のエラーの原因とその対処方法について詳しく解説します。

Excel VBAを使ってファイルパスを動的に取得する方法を具体的なコードと共に解説します。

この記事では

【Excel VBAを使ってファイルパスを動的に取得する方法】を図解で解説しています。

目次

VBAのパスをOneDriveにするとエラーが発生する

VBAでOneDrive上にあるフォルダやファイルを対象に処理を実行すると、パスが正しいにも関わらす、エラーが発生することがあります。

[Excel][VBA] OneDrive 下に置いたブックの Path がおかしくなる不具合とその対策 · GitHub

OneDriveのパスの特徴

OneDriveは、クラウドストレージサービスとして、ファイルをインターネット上に保存し、複数のデバイスからアクセスできるようにします。

しかし、この利便性の裏で、ローカルパスとは異なる扱いが必要な場合があります。

OneDriveパスでエラーが発生する理由

Excel VBAでOneDriveパスを使用するとエラーが発生する主な理由は以下の通りです。

パスの同期

OneDriveではファイルがクラウドと同期されますが、同期が完全に終わっていない場合や、ファイルがオンラインのみの状態になっている場合、VBAからそのファイルにアクセスしようとするとエラーが発生します。

特殊文字と長いパス

OneDriveのパスには特殊文字が含まれることがあります。

また、OneDriveのディレクトリ構造が深くなると、パスが非常に長くなり、Windowsのファイルパスの制限に引っかかることがあります。

これにより、ファイルへのアクセスが拒否されることがあります。

アクセス権限

OneDrive上のファイルは、アクセス権限がローカルファイルとは異なる場合があります。

特定のユーザーしかアクセスできないファイルに対してVBAでアクセスしようとすると、権限エラーが発生することがあります。

OneDriveでVBAマクロを使用するためのコード

取得したフルパスが「https」から始まっていた場合は、パソコンに教えてもらったパスに「OneDrive」というパスを繋げてフルパスに修正する必要があります。

Function GetFullPath(workbookPath As String) As String
    Dim fullPath As String
    
    If Left(workbookPath, 5) = "https" Then
        fullPath = Environ("UserProfile") & "\OneDrive"
    Else
        fullPath = workbookPath
    End If
    
    GetFullPath = fullPath
End Function
unction GetFullPath(workbookPath As String) As String
    Dim fullPath As String
    
    If Left(workbookPath, 5) = "https" Then
        fullPath = Environ("UserProfile") & "\OneDrive"
    Else
        fullPath = workbookPath
    End If
    
    GetFullPath = fullPath
End Function

新たな処理の追加

フルパス対策サブルーチン

ThisWorkbook.PathがOneDrive上のパスかどうかをチェックします。

httpsで始まる場合はEnviron(“UserProfile”) & “\OneDrive”に変更します。

それ以外の場合はThisWorkbook.Pathを使用します。

フォルダ作成サブルーチンへの適用

basePathをこの新しいパスに変更し、既存のフォルダ作成ロジックを適用します。

関数「GetFullPath」とは?

「GetFullPath」関数は、指定されたファイルパスがOneDrive上にある場合とローカルにある場合とで適切なパスを返す関数です。

この関数を使用することで、ファイルの場所に応じた正しいパスを動的に取得することができます。

コードの詳細解説

変数の宣言

最初に、返り値を格納するための変数 fullPath を宣言します。

Dim fullPath As String

条件分岐によるパスの判定

次に、指定されたパス workbookPath が「https」で始まるかどうかを判定します。

この判定によって、OneDrive上のパスかローカルのパスかを識別します。

If Left(workbookPath, 5) = "https" Then

OneDriveのパスを取得

workbookPath が「https」で始まる場合、OneDrive上のパスと判断し、環境変数 UserProfile を使用してOneDriveのパスを構築します。

fullPath = Environ("UserProfile") & "\OneDrive"

ローカルパスの取得

workbookPath が「https」で始まらない場合は、ローカルパスと判断し、そのまま workbookPath を fullPath に代入します。

fullPath = workbookPath

関数の返り値を設定

最後に、構築されたパスを関数の返り値として返します。

GetFullPath = fullPath

まとめ

OneDriveとローカルパスを判別して適切なパスを返すこの関数を使用することで、VBAスクリプトの管理が容易になります。

今回紹介したコードと解説を参考に、ぜひ実際の業務に役立ててください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次