フォーム
リストボックスの基本的な処理を説明しましたが、個人的にはリストボックスよりリストビューを使ってます。
理由としては、ヘッダーが簡単に追加できるからです。
リストビューは下記ツールボックスにデフォルトで表示されていないので、まずはツールボックスに追加するところから始めます。
ツールボックス上で右クリックし「その他のコントロール」を選択します。
「コントロールの追加」画面が表示されるので、「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
'ヘッダーのクリア
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
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
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
結果は下記のようにになります。