このページでは下表のメソッドについて説明します。これらはすべて FileSystemObject のメソッドになります。
内容 | メソッド |
---|---|
ファイルオブジェクト取得 | fso.GetFile |
ファイル存在チェック | fso.FileExists |
ファイルベース名取得 | fso.GetBaseName |
ファイル拡張子取得 | fso.GetExtensionName |
ファイル名取得 | fso.GetFileName |
親フォルダ取得 | fso.GetParentFolderName |
ドライブ名取得 | fso.GetDriveName |
使用方法
引数名 | 省略 | 説明 |
---|---|---|
Path | × | ファイルパスを指定します。 ファイルパスは絶対パス、相対パス、ネットワークパスのいずれも指定可能です。 相対パスを指定した場合はカレントフォルダ(⇒CurDir関数)が基準となります。 |
各メソッドの説明
fso.GetFile
引数で指定したファイルパスのファイルオブジェクトを返します。ファイルパスは事前に次の fso.FileExists でチェックしておくとよいでしょう。
Dim fso As Object
Dim fileObj As Object
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルオブジェクト取得
Set fileobj = fso.GetFile("C:¥Users¥xxx¥Desktop¥test.txt")
'ファイルオブジェクトに対する処理を実施
'オブジェクト変数クリア
Set fso = Nothing
Set fileObj = Nothing
fso.FileExists
引数で指定したファイルパスの存在チェックを行い、結果を True または False で返します。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
if Not fso.FileExists("C:¥Users¥xxx¥Desktop¥test.txt") then
MsgBox "ファイルが存在しません。処理を中止します。"
End
End If
'オブジェクト変数クリア
Set fso = Nothing
fso.GetBaseName
引数で指定したファイルパスのベースネームを返します。ベースネームとはファイル名の拡張子を除いた部分のことです。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Debug.Print fso.GetBaseName("C:¥Users¥xxx¥Desktop¥test.txt")
'オブジェクト変数クリア
Set fso = Nothing
fso.GetExtensionName
引数で指定したファイルパスの拡張子を返します。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Debug.Print fso.GetExtensionName("C:¥Users¥xxx¥Desktop¥test.txt")
'オブジェクト変数クリア
Set fso = Nothing
fso.GetFileName
引数で指定したファイルパスのファイル名を返します。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Debug.Print fso.GetFileName("C:¥Users¥xxx¥Desktop¥test.txt")
'オブジェクト変数クリア
Set fso = Nothing
fso.GetParentFolderName
引数で指定したファイルパスの親フォルダを返します。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Debug.Print fso.GetParentFolderName("C:¥Users¥xxx¥Desktop¥test.txt")
'オブジェクト変数クリア
Set fso = Nothing
fso.GetDriveName
引数で指定したファイルパスのドライブ名を返します。ネットワーク上のパスを指定した場合は、ネットワーク共有名( ¥¥[サーバー名]¥[共有フォルダ名] )を返却します。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Debug.Print fso.GetDriveName("C:¥Users¥xxx¥Desktop¥test.txt")
'オブジェクト変数クリア
Set fso = Nothing
上記で解説した fso.GetBaseName ~ fso.GetDriveName については単純に特定文字列の抽出を行っているにすぎず、存在しないパスでも正常に処理されてしまいます。
ファイルのパス情報を表示する例
ローカルPC上のファイルと、ネットワーク上のファイルのパス情報を出力する例です。ファイルが存在していればパス情報をイミディエイトウィンドウへすべて表示します。また、CreateObject 関数の戻り値を直接 Withステートメント に指定することで、オブジェクト変数(fso)の宣言と Set ステートメントによる格納の手間を省いています。
Sub sample_fs021_01()
Dim myPath As String
myPath = "C:¥Users¥Public¥vba¥test.txt"
Call printFilePathInfo(myPath)
'ネットワーク上のパスを指定
myPath = "¥¥SHARE-PC¥share¥vba¥test.xlsx"
Call printFilePathInfo(myPath)
End Sub
Private Sub printFilePathInfo(strPath As String)
Debug.Print "" '空白行
Debug.Print "Path ->" & strPath
With CreateObject("Scripting.FileSystemObject")
Debug.Print "Exists ->" & .FileExists(strPath)
If .FileExists(strPath) Then
Debug.Print "BaseName ->" & .GetBaseName(strPath)
Debug.Print "ExtName ->" & .GetExtensionName(strPath)
Debug.Print "FileName ->" & .GetFileName(strPath)
Debug.Print "PFolder ->" & .GetParentFolderName(strPath)
Debug.Print "DriveName->" & .GetDriveName(strPath)
End If
End With
End Sub