2011-01-06 19 views
0

私は絶対パスに変換して相対パスを扱うこの関数を持っています。VBAで特定のパスが相対パスか絶対パスかを確認するにはどうすればよいですか?

Public Function ifRelativeConvertToAbsolutePath(path As String) As String 

    If (isPathRelative(path)) Then 
     ifRelativeConvertToAbsolutePath = convertToAbsolutePath(path) 
    Else 
     ifRelativeConvertToAbsolutePath = path 
    End If 

End Function 

isPathRelativeの機能はどのように実装できますか?

私のアイデアは、次のとおりです。

  • チェック、それは「で始まる場合、任意の「\」は文字列
+0

'path'が相対的であるかどうかにかかわらず、' convertToAbsolutePath'を呼び出すことはできません。 –

+0

自分で 'convertToAbsolutePath'を実装しました。これは基本的に 'ThisWorkBook.Path'の終わりまでのパスを連結します – Robert

+0

その方法は動作しません' \ .. \ .. \ .. \ Program Files \ etc'のようなセグメントを含む相対パス – Alain

答えて

2

チェックに存在する場合、パスは「\」

  • チェックで始まる場合\ "(UNCの場合は" \ "を含む)または1文字+":\ "の場合

    Function IsPathRel(p As String) As Boolean 
        IsPathRel = Not ((Left(p, 3) Like "[A-Z]:\") Or (Left(p, 1) = "\")) 
    End Function 
    
  • +0

    '(Left(p、1)=" \ ")'と混乱します。このビットがネットワークパスをチェックしているなら、確実に "\\"で始まるので、 '(Left(p、2)=" \\ ")' – Robert

    +0

    UNCは "\\"ドライブ文字を省略すると、ドライブパスは "\"で始まります。だから、単一の "\"で始まるパスは常に絶対的なものです。 –

    3

    また、そのためのシェルAPIもあります。PathIsRelative)、またはPathCombineがあります。これは、relパスを受け取った場合、自動的にrelパスをabsパスに変換します。

    Private Declare Function PathCombine Lib "shlwapi.dll" Alias "PathCombineA" (ByVal szDest As String, ByVal lpszDir As String, ByVal lpszFile As String) As Long 
    
    Dim sBuff As String * 255 
    PathCombine sBuff, "C:\theroot\xxx\", "..\jibblets" 
    x = Left$(sBuff, InStr(1, sBuff, vbNullChar) - 1) 
    
    == "C:\theroot\jibblets" 
    
    PathCombine sBuff, "C:\theroot\xxx\", "X:\foo.bar" 
    
    == "X:\foo.bar" 
    
    1

    あなたが何を以下のなかった場合:

    If not Dir(thisWorkbook.Path & "\" & path, vbDirectory) = vbNullString then 
        ifRelativeConvertToAbsolutePath = thisWorkbook.Path & "\" & path 
    else 
        ifRelativeConvertToAbsolutePath = path 
    end if 
    

    基本的には、パスを連結してみてください。有効なパスが得られた場合、それは相対パスであって、それを修正しただけです。有効なパスが得られない場合は、そのメソッドを使用してパスを修正することはできません。

    +0

    2つの絶対パスを連結すると、オペレーティングシステムの規約や基本的なファイル命名規則に準拠しないため、エラーが発生するため、これは機能しません。 – Khamyl

    関連する問題