目的
dir() を使用したものはよく見るのだけど、FileSystemObjectを使って実装してみる
以下検討事項
・ファイル名用の配列はモジュール・ローカルが良いのかどうか?
・拡張子は Optional にするべき?
・追加の Optional としては、フォルダ/ファイルのフラグ追加はどうかな?
サンプルコード
'=================================================================
' 名 称 : FileProcMain
' 機 能 : 指定フォルダ以下のファイル取得後表示する
' : 名前とか特に意味はない
'=================================================================
Sub FileProcMain()
'
Dim fList() As String
Dim cnt As Integer
'
ReDim fList(0)
Call getFileList("/path/to/target/folder", "py", fList())
'
For cnt = 1 To UBound(fList)
Debug.Print (fList(cnt))
Next
'
End Sub
'=================================================================
' 名 称 : getFileList
' 機 能 : 指定フォルダ以下のファイル名の一覧を取得する
'=================================================================
Sub getFileList(astrPath As String, astrExt As String, aList() As String)
'
Dim objFso As New FileSystemObject
Dim objFolders As Folder
Dim objFiles As File
Dim cnt As Integer
'
' サブフォルダを取得する
'
For Each objFolders In objFso.GetFolder(astrPath).SubFolders
Call getFileList(objFolders.Path, astrExt, aList)
Next
'
' ファイルを取得する
' このフォルダにあるサブフォルダ以下のファイル一覧は取得済
'
For Each objFiles In objFso.GetFolder(astrPath).Files
'
' 指定拡張子のファイルのみを処理対象とする
'
If StrConv(objFso.GetExtensionName(objFiles.Name), vbUpperCase) = StrConv(astrExt, vbUpperCase) Then
cnt = UBound(aList)
ReDim Preserve aList(cnt + 1)
aList(cnt + 1) = objFso.BuildPath(astrPath, objFiles.Name)
End If
Next
'
End Sub