フォルダからファイル一覧を取得しリストボックスに表示する:Access VBA

VBAでサブフォルダをフォルダからファイル一覧を取得するには、FileSystemObjectを使用します。

FileSystemObjectは参照設定で、Microsoft Scripting Runtimeをチェックすれば使用できます。

リストボックスに表示するには、RowSource=""でクリアしAddItemで追加します。

BackHomeへ戻る Backテクニックへ



ファイル一覧をリストボックスに表示するフォームの作成

フォームにコマンドボタン・リストボックス・テキストボックスを配置します。
コマンドボタンで処理を開始します。
テキストボックスには検索するフォルダ名を入力します。
リストボックスにはプロパティで値集合ソースに設定しておいてください。
値集合ソースでないと、RowSource=""でクリアするとエラーが発生します。
ファイル一覧をリストボックスに表示するフォーム

フォルダからファイル一覧を取得しリストボックスに表示するVBA

初めに参照設定を行います。
  1. リボンの[フォーム デザインツール]~[デザイン]~ツールグループの[コードの表示]をクリックし、VBE画面を表示します。
  2. メニューの[ツール]~[参照設定]をクリックします。
  3. 参照可能なライブラリ ファイルから「Microsoft Scripting Runtime」を探し、チェックを入れて下さい。
[OK]ボタンをクリックし設定完了です。
参照設定をする

コマンドボタンを選択し、プロパティ シートでクリック時のイベントから[イベント プロシージャ]を選択します。
クリック時のイベントから[イベント プロシージャ]を選択する

クリック イベントとファイル一覧を取得し、リストボックスに追加するVBAです。
ファイル一覧を取得し、リストボックスに追加する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

実行結果です。
コマンドボタンをクリックすると、指定されたフォルダ内のサブフォルダを含む、ファイル一覧がリストボックスに表示されます。
フォルダ内のファイル一覧がリストボックスに表示される




BackHomeへ戻る Backテクニックへ

Copyright(C) FeedSoft