ListViewにファイルをドラッグ&ドロップして登録する(その1)


まず、UserFormにListViewコントロールを配置します。

ユーザーフォームの初期化イベントに次のコードを書きます。

Private Sub UserForm_Initialize() With Me.ListView1 .View = lvwReport '表示形式 .LabelEdit = lvwManual 'ラベル編集 .AllowColumnReorder = True '列幅の変更を許可 .FullRowSelect = True '行全体を選択 .Gridlines = True 'グリッド .MultiSelect = True '複数選択 '列見出し .ColumnHeaders.Add , "key1", "File Name", 100, lvwColumnLeft .ColumnHeaders.Add , "key2", "File Path", 200, lvwColumnLeft End With End Sub

列の見出しは左から、ファイル名、ファイルパスです。

続いて、次のコードをListView1のOLEDragDropイベントに書きます。

Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) Dim filePath As String Dim fileName As String Dim fileCount As Long Dim indexFile As Long fileCount = Data.Files.Count 'ドロップするファイルの数を取得 For indexFile = 1 To fileCount 'ファイルの数だけ処理を繰り返す filePath = Data.Files(indexFile) 'ファイルのパスを取得 fileName = Dir(filePath)’ファイル名を取得 With Me.ListView1.ListItems.Add’リストビューに行を追加 .Text = fileName’一列目にファイル名を追加 .SubItems(1) = filePath'二列目にファイルパスを追加する End With Next End Sub

すると、複数のファイルを選んで、このListViewにドロップした時に、下図のようにファイル名とファイルパスがリストビューに追加されます。

最後に、リストをダブルクリックした時に、選択されているファイルを開く処理を入れます。

ファイル形式に応じてデフォルトのアプリケーションで開く仕様です。

ListViewコントロールのダブルクリックイベントに次のコードを書きます。

Private Sub ListView1_DblClick() On Error GoTo ErrorHundler

  '二列目、つまりSubitems(1)からファイルパスを取得して開きます。 CreateObject("WScript.Shell").Run ("""" & Me.ListView1.SelectedItem.SubItems(1) & """") Exit Sub ErrorHundler: MsgBox "File Not Found." End Sub

この仕組みは、例えば、各顧客の管理画面の中にこのリストを入れて、その顧客に関するファイルをここに登録するなどの用途で使えます。

このリストを基にパスをデータベースに登録したり、実ファイルを指定したフォルダに振り分けて保存するなど色々な機能を追加できます。

#ExcelVBA #Listview #ドラッグドロップ