【本日のミッション】
エクセル VBA ListViewオブジェクト の ListItemsコレクション・SubItemsコレクションを解明せよ。
ミッションの概要
エクセル VBA ListViewオブジェクト の ListItemsコレクション・SubItemsコレクションを解明せよ、というのが今回のミッションです。
ListViewオブジェクトを使う時、表示形式を詳細表示「lvwReport」にしていると、複数列のデータを表示させることができるのですが、列によって扱うコレクションが異なります。
ここに出てくる「ListItemsコレクション」と「SubItemsコレクション」の使い方を調べてみました。
プロシージャ
ListItemsコレクション・SubItemsコレクションの動作を確認するために、下記プロシージャをサンプルとして使用します。
その他のコードの内容につきましては、エクセル VBA ListViewにドラッグ&ドロップでファイル名・ファイルパス複数の情報を取得(Excel VBA)をご参照ください。
ファイルをドラッグ&ドロップすると、No(連番)、ファイル名、ファイルパスを取得するコードになります。
Private Sub UserForm_Initialize() With ListView1 '■プロパティ設定 .FullRowSelect = True '行全体の選択 .Gridlines = True '行列グリッド線の表示 .LabelEdit = lvwManual 'ラベル編集不可 .OLEDropMode = ccOLEDropManual 'ファイルドロップ処理 .View = lvwReport '表示形式 '■列見出しの名前・列幅の設定 .ColumnHeaders.Add , "key1", "No", 30, lvwColumnLeft .ColumnHeaders.Add , "key2", "ファイル名", 100, lvwColumnLeft .ColumnHeaders.Add , "key3", "ファイルパス", 300, lvwColumnLeft End With End Sub Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) '【変数】 Dim i As Long 'カウンター Dim fileCount As Long 'ファイル数 With ListView1 '■既存ファイル名のクリア .ListItems.Clear '■ファイル数の取得 fileCount = Data.Files.Count '■ドラッグ&ドロップしたファイル名・ファイルパスを順にリスト化 For i = 1 To fileCount With .ListItems.Add .Text = i ’No .SubItems(1) = Dir(Data.Files(i)) 'ファイル名 .SubItems(2) = Data.Files(i) 'ファイルパス End With Next i End With End Sub
ListItemsコレクション・SubItemsコレクション
ListViewの表示形式を詳細表示「lvwReport」(参考:エクセル VBA ListView の View プロパティ とは(Excel VBA))にしている場合、「ListItemsコレクション」は左の1列目のみになります。2列目以降は1列目「ListItemsコレクション」の「SubItemsコレクション」になります。
今回のプロシージャの処理の順番は下記の通りです。
- ListItems.Addで「ListItemsコレクション」を追加します。
- 追加された「ListItemsコレクション」の Text に No(i)を入れます。
- 追加された「ListItemsコレクション」の1つ目の「SubItemsコレクション」にファイル名(i番目)を入れます。
- 追加された「ListItemsコレクション」の2つ目の「SubItemsコレクション」にファイルパス(i番目)を入れます。
For i = 1 To fileCount With .ListItems.Add .Text = i 'No .SubItems(1) = Dir(Data.Files(i)) 'ファイル名 .SubItems(2) = Data.Files(i) 'ファイルパス End With Next i
上記コードの処理がどんな風に行われているか、具体的に表記するならこんな感じです。
変数iを数字で、ファイル名・ファイルパスを実際のテキストとして表示しています。
①1つ目の ListItems が追加されて、その Text に「1」が入ります。
②追加された ListItems の1つ目の SubItems に「File1_1.xlsx」が入ります。
③追加された ListItems の2つ目の SubItems に「C:\VBA\第1階層\File1_1.xlsx」が入ります。
④2つ目の ListItems が追加されて、その Text に「2」が入ります。
⑤追加された ListItems の1つ目の SubItems に「File1_2.xlsx」が入ります。
⑥追加された ListItems の2つ目の SubItems に「C:\VBA\第1階層\File1_2.xlsx」が入ります。
⑦3つ目の ListItems が追加されて、その Text に「3」が入ります。
⑧追加された ListItems の1つ目の SubItems に「File1_3.xlsx」が入ります。
⑨追加された ListItems の2つ目の SubItems に「C:\VBA\第1階層\File1_3.xlsx」が入ります。
With .ListItems.Add .Text = 1 'No .SubItems(1) = "File1_1.xlsx" 'ファイル名 .SubItems(2) = "C:\VBA\第1階層\File1_1.xlsx" 'ファイルパス End With With .ListItems.Add .Text = 2 'No .SubItems(1) = "File1_2.xlsx" 'ファイル名 .SubItems(2) = "C:\VBA\第1階層\File1_2.xlsx" 'ファイルパス End With With .ListItems.Add .Text = 3 'No .SubItems(1) = "File1_3.xlsx" 'ファイル名 .SubItems(2) = "C:\VBA\第1階層\File1_3.xlsx" 'ファイルパス End With
【参考】
VBA(マクロ)作成の前、リボンに開発タブを表示させる(Excel VBA)
ユーザーフォームの作成方法 準備(Excel VBA)
ユーザーフォームのオブジェクトの名前を「UserForm1」から変更する方法(Excel VBA)
ユーザーフォームの上のバー(タイトルバー)の名前を「UserForm1」から変更する(Excel VBA)
ユーザーフォームのオブジェクトウィンドウとコードウィンドウを表示切替させる方法(Excel VBA)
「オブジェクト名が不正です」を出さないようにユーザーフォームオブジェクト名を命名規則に従って変更(Excel VBA)
エクセルファイルが開いた時にユーザーフォームを表示させる方法(Excel VBA)
エクセル フォームのラベルのテキストを縦書きにする方法(Excel VBA)
エクセル VBA フォーム ツールボックスにListViewコントロールを追加(Excel VBA)
エクセル VBA フォーム「Microsoft ListView Control」が出てこない原因 (Excel VBA)
エクセル VBA ListViewにドラッグ&ドロップでファイルパスを取得(Excel VBA)
エクセル VBA ListViewにスクロールバーを表示させる(Excel VBA)
エクセル VBA ListView の FullRowSelect プロパティとは(Excel VBA)
エクセル VBA ListView の Gridlines プロパティとは(Excel VBA)
エクセル VBA ListView の LabelEdit プロパティとは(Excel VBA)
エクセル VBA ListView の OLEDropMode プロパティとは(Excel VBA)
エクセル VBA ListView の View プロパティ とは(Excel VBA)
エクセル VBA ListView の ColumnHeaders コレクションとは(Excel VBA)
エクセル VBA ListViewにドラッグ&ドロップでファイル名・ファイルパス複数の情報を取得(Excel VBA)
エクセル VBA ListViewのListItems・SubItemsコレクションとは(Excel VBA)
エクセル VBA ListView の OLEDragDropイベントとは(Excel VBA)