フォーム
リストボックスの基本的な処理を説明しましたが、個人的にはリストボックスよりリストビューを使ってます。
理由としては、ヘッダーが簡単に追加できるからです。
リストビューは下記ツールボックスにデフォルトで表示されていないので、まずはツールボックスに追加するところから始めます。
ツールボックス上で右クリックし「その他のコントロール」を選択します。
「コントロールの追加」画面が表示されるので、「Microsoft ListView Control, version X.X」を選択します。
すると、ツールボックス上にListViewのアイコンが作成されました。これを使ってフォームにListViewを作成して下さい。
比較しやすいように、今回は
リストボックスの時と同じようなフォームを作成しました。
プロパティ
ListViewをフォーム上に作成したらプロパティを下記のように変更します。
「GridLines」はグリッド線の表示有無で、
Trueにすることで表示が見やすくなります。
「View」は いくつか種類がありますが、ヘッダー利用のためにListViewを利用するので
「3 - lvwReport」を選択します。
フォーム起動時の設定
編集画面でフォームをダブルクリックすると、下記のような関数が作成されます。
Private Sub UserForm_Click()
End Sub
Clickから
Initializeを選択すると、フォーム起動時に実行される処理が作成できます。
このフォーム起動時の処理に下記をコーディングします。
Private Sub UserForm_Initialize()
'ヘッダーのクリア
lstFileName.ColumnHeaders.Clear
'リストのクリア
lstFileName.ListItems.Clear
'ヘッダーの作成(左詰)
lstFileName.ColumnHeaders.Add 1, "FileName", "ファイル名", 200, lvwColumnLeft
End Sub
その結果、フォームを起動すると、下記のように画面が作成できます。
フォルダの取得方法
下記のようにファイルを複数選択した場合・・・
選択したファイルをリストビューに表示します。
'フォルダ選択のダイアログを表示する
With Application.FileDialog(msoFileDialogFilePicker)
'複数選択可
.AllowMultiSelect = True
'フィルター:ファイル種類
With .Filters
.Clear
.Add "Microsoft Excel", "*.xls?"
.Add "text", "*.txt"
.Add "All File", "*.*"
End With
'OKを押した場合
If .Show = True Then
'リストビューアイテムのクリア
lstFileName.ListItems.Clear
'選択したファイルをリストビューに登録
For i = 1 To .SelectedItems.Count
lstFileName.ListItems.Add.Text = .SelectedItems(i)
'リストビューのデータをチェック
lstFileName.ListItems(i).Checked = True
Next i
End If
End With
リストの表示方法を変更する
下記のようにプロパティの
【Checkboxes】を
「True」に変更します。
すると、下記のようにチェックボックスが表示されます。
選択した情報の取得方法
リストに表示されている件数分ループ処理を行い、それぞれチェックされているか判定します。
Dim i As Long
Dim strData As String
'リストビューに登録された件数分ループする
For i = 1 To lstFileName.ListItems.Count
'対象データが選択されている場合
If lstFileName.ListItems(i).Checked Then
'表示対象として変数に取得する
strData = strData & lstFileName.ListItems(i).Text & vbCrLf
End If
Next i
'メッセージボックスで選択データを表示
MsgBox strData
結果は下記のようにになります。