指定フォルダー以下の全ファイルを列挙 |
指定フォルダー以下(サブフォルダー内を含む)の全ファイルを列挙する (416) | |
フォームに List1 とCommand1 を貼り付けて下さい。 | |
Option Explicit '使用する前に、[プロジェクト]→[参照設定]で 'Microsoft Scripting Runtime の参照にチェックを入れておいて下さい。 Private Sub Command1_Click() Dim Fso As New FileSystemObject List1.Clear List1.Visible = False '指定のフォルダーを指定 Call sFolderSearch2(Fso.GetFolder("c:\Test")) Set Fso = Nothing List1.Visible = True MsgBox "ファイルが" & List1.ListCount & "個見つかりました" End Sub Private Sub sFolderSearch2(ByVal myFolder As Object) Dim mySubFolder As Folder Dim myFile As File '現在のフォルダー内のファイルを取得 For Each myFile In myFolder.Files '指定の拡張子のファイルを取得する場合 ' If LCase(Right(myFile.Name, 3)) = "xls" Then List1.AddItem myFolder & "\" & myFile.Name ' End If Next With myFolder 'サブフォルダー数を取得 If .SubFolders.Count > 0 Then For Each mySubFolder In .SubFolders 'サブフォルダーがある場合再帰的に繰り返す Call sFolderSearch2(mySubFolder) Next End If End With Set myFile = Nothing Set mySubFolder = Nothing End Sub |
|
コードが簡単なので、FileSystemObject オブジェクトを使って取得しております。 指定の拡張子だけとか取得したい場合は、Dir 関数を使って取得した方が早くなります。又、同じファイルの色々な情報(更新日付やファイルの種類やサイズ等)を同時に取得したい場合は、Shell.Application を使って取得した方が格段に早くなります。 Dir 関数でSystemフォルダー内のファイルを取得するのに 3.5秒かかり 同じものを、Shell.Application で取得すると 0.5秒 で取得できます。 |
2005/05/27