#106 ファイルのフルパスを構成要素に分解するには? VBA

FileSystemObjectオブジェクトには、ファイルのフルパスから各構成要素を取り出すためのメソッドがいくつかあります。例えば、"c:\My Documents\db1.mdb"を引数に指定した場合、各メソッドは次のような要素を返します。

メソッド名 機 能 返り値
GetDriveNameメソッド ドライブ名部分を取り出します c:
GetParentFolderNameメソッド ドライブ名+フォルダ名部分を取り出します c:\My Documents\
GetFileNameメソッド ファイル名+拡張子部分を取り出します db1.mdb
GetExtensionNameメソッド 拡張子部分を取り出します .mdb

この中で、GetParentFolderNameメソッドは「ドライブ名+フォルダ名」を返します。またGetFileNameメソッドは「ファイル名+拡張子」を返します。次のサンプルプロシージャでは、これらの部分をさらに文字列関数を使って分解し、フォルダ名やファイル名の部分だけを取り出しています。

サンプルプロシージャ:
Public Sub ParseFullPath(strFullPath As String, strDrive As String, _
                              strDir As String, _
                              strFName As String, strExt As String)

  Dim Fso As Object
    
  'FileSystemObjectオブジェクトを生成します
  Set Fso = CreateObject("Scripting.FileSystemObject")
  
  With Fso
    'フルパスからドライブ名を取得します
    strDrive = .GetDriveName(strFullPath)
    
    'フルパスからフォルダ名部分を取り出します
    strDir = Mid$(.GetParentFolderName(strFullPath), Len(strDrive) + 1)
    If Right$(strDir, 1) <> "\" Then strDir = strDir & "\"
    
    'フルパスから拡張子を取得します
    strExt = .GetExtensionName(strFullPath)
    If Len(strExt) > 0 Then strExt = "." & strExt
    
    'フルパスからファイル名+拡張子を取得します
    strFName = .GetFileName(strFullPath)
    'ファイル名+拡張子からファイル名だけを取り出します
    strFName = Left$(strFName, Len(strFName) - Len(strExt))
  
  End With

End Sub

使用例:
Dim strDrive As String
Dim strDir As String
Dim strFName As String
Dim strExt As String

'フルパス名を分解するプロシージャを呼び出します
ParseFullPath "c:\My Documents\db1.mdb", strDrive, strDir, strFName, strExt

'結果をイミディエイトウィンドウに出力します
Debug.Print "ドライブ名: " & strDrive
Debug.Print "フォルダ名: " & strDir
Debug.Print "ファイル名: " & strFName
Debug.Print "拡張子    : " & strExt
実行結果
※これは実際にそのファイルが存在しなくても正しく動作します。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved