ファイル一覧をリストボックスに表示するフォームの作成
フォームにコマンドボタン・リストボックス・テキストボックスを配置します。
コマンドボタンで処理を開始します。
テキストボックスには検索するフォルダ名を入力します。
リストボックスにはプロパティで値集合ソースに設定しておいてください。
値集合ソースでないと、RowSource=""でクリアするとエラーが発生します。
フォルダからファイル一覧を取得しリストボックスに表示するVBA
初めに参照設定を行います。
- リボンの[フォーム デザインツール]~[デザイン]~ツールグループの[コードの表示]をクリックし、VBE画面を表示します。
- メニューの[ツール]~[参照設定]をクリックします。
- 参照可能なライブラリ ファイルから「Microsoft Scripting Runtime」を探し、チェックを入れて下さい。
[OK]ボタンをクリックし設定完了です。
コマンドボタンを選択し、プロパティ シートでクリック時のイベントから[イベント プロシージャ]を選択します。
クリック イベントとファイル一覧を取得し、リストボックスに追加するVBAです。
コマンドボタンのクリック イベントVBAの解説
・テキストボックスにフォルダ名の入力がなければ、メッセージを表示しSubプロシージャから抜けます。
・[参照]ボタンを追加し、フォルダ選択ダイアログを表示するようにすると、さらに親切になります。
・本来ならばここで、指定されたフォルダが存在するかどうかチェックする必要があります。
・リストボックスのクリアは、RowSource=""でできます。 (値集合タイプを値集合ソースに設定しておく必要があります。)
Private Sub コマンド0_Click()
If IsNull(Me!テキスト1) Then
MsgBox "取得先フォルダーを入力してください。"
Exit Sub
End If
Me!リスト1.RowSource = ""
MyFileSerach "C:\test\"
End Sub
ファイル一覧取得から、リストボックスに追加するVBAの解説
・FileSystemObjectの変数tFsに、FileSystemObjectオブジェクトをコピーします。
・For Eachで、フォルダ数だけループし、自身のプロシージャを再帰呼び出しします。
・For Eachで、Filesプロパティのファイル数だけループします。
・AddItemでリストボックスに追加します。
・Pathプロパティでフォルダ名が付いたフルパス名を取得できます。 ファイル名のみ取得したい場合は、Nameプロパティになります。
Option Compare Database
Option Explicit
Sub MyFileSerach(sPath As String)
Dim tFs As FileSystemObject
Set tFs = New FileSystemObject
Call MyFileSerachSub(tFs.GetFolder(sPath))
Set tFs = Nothing
End Sub
Sub MyFileSerachSub(ByVal tPath As Folder)
Dim tIniPath As Folder
Dim tFile As File
For Each tIniPath In tPath.SubFolders
Call MyFileSerachSub(tIniPath)
Next tIniPath
For Each tFile In tPath.Files
Me!リスト1.AddItem tFile.Path
Next tFile
Set tPath = Nothing
End Sub
実行結果です。
コマンドボタンをクリックすると、指定されたフォルダ内のサブフォルダを含む、ファイル一覧がリストボックスに表示されます。