ユーザーフォーム上でフォルダを選択する

昨日までの「指定パス直下のフォルダ名を取得する」は、末端にあるファイルを簡単に選択するための仕掛けだ。
infoment.hatenablog.com

ユーザーフォーム上のリストボックスで選択したフォルダについて、その隣のリストボックスにサブフォルダ一覧を表示する。

実際には、↓のようになる(※最終形ではない)。
f:id:Infoment:20181030222221p:plain

今回は左から順に、絞り込みを行う仕様とする。
f:id:Infoment:20181030222459p:plain

ユーザーフォーム(SelectFileForm)

先日クラスモジュールを作りこんであるため、ユーザーフォームの初期化は、割と簡素に済んでいる。

Option Explicit
    Const FolderPath As String = "C:\Temp"
    Dim SQC As SequenceClass

Private Sub UserForm_Initialize()
    Set SQC = New SequenceClass
        FolderListBox1.List = SQC.GetSubFoldersSeq(FolderPath)
        FolderPathLabel = FolderPath
End Sub

サブフォルダ名をまとめて配列化し、そのままリストボックスにセットしている。また、現時点でのフルパスをラベルに反映させている。


次いで、一番左のリストボックスをクリックしたときの挙動を設定する。

  • 左:FolderListBox1
  • 中:FolderListBox2
  • 右:FileListBox
Private Sub FolderListBox1_Click()
    Dim FullPath As String
        FullPath = FolderPath & "\" & FolderListBox1.Value
    With FolderListBox2
        .Clear
        .List = SQC.GetSubFoldersSeq(FullPath)
    End With
        FileListBox.Clear
        FolderPathLabel = FullPath
End Sub


最後に、真ん中のリストボックスをクリックしたときの挙動を設定する。
※前回配列化したのはサブフォルダまでであって、ファイル名は未対応。

Private Sub FolderListBox2_Click()
    Dim FullPath As String
        FullPath = FolderPath & "\" & _
                   FolderListBox1.Value & "\" & _
                   FolderListBox2.Value
        FolderPathLabel = FullPath
End Sub

実際に動かしてみると、↓ このようになる。
f:id:Infoment:20181030224208g:plain

割と、直感的に選べるようになっていると思う。

明日は、右のリストボックスにファイル一覧を表示するところから再開します。

参考まで。