#657 | コンボボックスにフォルダ内のファイルをリスト表示させるには? | フォーム、VBA | |
VBAでのファイル処理においては、その”パス”をユーザーが自由に指定できるようにするために、Windows APIを使うなどして「ファイルを開く」ダイアログを表示させる方法があります。その場合、ユーザーは好きなドライブやフォルダを自由に選択することができます。 一方、そのファイルの”ドライブ+フォルダ”部分があらかじめ固定されている場合、たとえばデータベースファイルのあるフォルダ下のサブフォルダにある既存ファイルを選択するような場合、「ファイルを開く」ダイアログは逆に自由度があって都合が悪いかもしれません。 そのようなとき、VBAを使って、それらのファイルをコンボボックスのドロップダウンリストとして表示させることができます。もちろんユーザーはそのリストの中から任意のファイル名を選択するような操作となります。 次の例では、フォームの「Load/読み込み時」イベントプロシージャを使って、「Dir」関数で所定フォルダ内のファイルをループで探索、見つかったファイル名を順次組み立てていき、最後にリスト表示するためのコンボボックス「cboMyFiles」の値リストとして「値集合ソース」プロパティに代入しています。 リストに一覧表示するファイルは、データベースファイルが置かれたフォルダのサブフォルダ「MyFiles」にあらかじめ用意されているものとします(サブフォルダ名はプログラム上で固定です)。 また、コンボボックスの「値集合タイプ」プロパティはあらかじめデザイン時に「値リスト」に設定されているものとします。 Private Sub Form_Load() 'フォーム読み込み時 Dim strFile As String Dim strRowSource As String 'MyFilesサブフォルダ内のすべてのファイルを探索 strFile = Dir(CurrentProject.Path & "\MyFiles\*.*") Do While strFile <> "" '見つかったファイル名を変数に追加 strRowSource = strRowSource & strFile & ";" '次のファイルを検索 strFile = Dir Loop 'コンボボックスの値集合ソースを設定 Me!cboMyFiles.RowSource = strRowSource End Sub 実行例: ■エクスプローラで見たファイル一覧 ■フォームの表示 ※「"\MyFiles\*.*"」の部分のワイルドカードを書き換えることで、特定の名前のファイル名だけを取り出すこともできます。たとえば「"\MyFiles\*.txt"」とすれば、拡張子が「txt」であるテキストファイルだけを列挙できます。また「"\MyFiles\A*.*"」とすれば、ファイル名が「A」で始まるファイルだけを列挙できます。 【注意】 コンボボックスの値集合ソースプロパティの制限から、それに設定できる文字列長は「32,750文字」までとなります(これには値リストの区切り文字である「;」も含みます)。ファイルの”数”ではなく「ファイル名+;」の”総文字数”です。ファイル数が多い場合、実際に使われる環境では全ファイル名を設定できずエラーとなる場合があります。 |
|||
|
Copyright © T'sWare All rights reserved |