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