指定したフォルダーのサブフォルダーも含むファイルの一覧を取得する方法の例を記載しています。本記事ではFileSystemObjectを利用します。FileSystemObjectをVBAで利用する方法は以下の記事を参照してください。
サブフォルダー内のファイルも含むファイルの一覧を取得するVBA
Option Explicit
' GetFileListプロシージャから、実際にファイルの一覧を取得する
' GetFileListInFolderプロシージャを呼び出す
Sub GetFileList()
Const folderPath As String = "C:\Windows"
Call GetFileListInFolder(folderPath, True)
End Sub
' ファイルの一覧を出力する
' folderPath:ファイルの一覧を取得したいフォルダーのパスの文字列
' isSubFolder:サブフォルダーも対象に一覧出力したい場合はTrue、そうでなければ、False
Sub GetFileListInFolder(folderPath, isSubFolder)
Dim fso As FileSystemObject '① FileSystemObject オブジェクト変数の宣言
Dim folderObj As Folder '② Folder オブジェクト変数の宣言
Dim fileObj As File '③ File オブジェクト変数の宣言
Set fso = New FileSystemObject '④ FileSystemObjectの割り当て
If Not (fso.FolderExists(folderPath)) Then '⑤ フォルダーが見つからなかったら処理を中断
Set fso = Nothing
MsgBox ("フォルダーが見つかりません。処理を中断します。" & vbCrLf & _
"フォルダー:" & folderPath)
Exit Sub
End If
If isSubFolder Then '⑥ 引数isSubFolderがTrueだった場合、GetFileListInFolderを再帰的呼び出し。
For Each folderObj In fso.GetFolder(folderPath).SubFolders
Call GetFileListInFolder(folderObj.Path, isSubFolder)
Next
End If
Set folderObj = fso.GetFolder(folderPath) '⑦ 変数folderPathのフォルダーの取得
For Each fileObj In folderObj.Files '⑧ フォルダー内にある複数のファイルに対して繰り返す
Debug.Print fileObj.Path '⑨ ファイルの名前をイミディエイトに出力
Next
Set fso = Nothing '⑩ fsoの破棄
End Sub
コメント