エクセル VBA ListView の OLEDragDropイベントとは(Excel VBA)

【本日のミッション】

エクセル VBA の ListViewオブジェクト の OLEDragDropイベントとは何か解明せよ。

ミッションの概要

エクセル VBA の ListViewオブジェクト の OLEDragDropイベントとは何か解明せよ、というのが今回のミッションです。

エクセル VBA ListView の OLEDragDropイベントとは(Excel VBA)

プロシージャ

OLEDragDropイベントの動作を確認するために、下記プロシージャをサンプルとして使用します。

その他のコードの内容につきましては、エクセル VBA ListViewにドラッグ&ドロップでファイル名・ファイルパス複数の情報を取得(Excel VBA) をご参照ください。

ファイルをドラッグ&ドロップすると、ファイル名、ファイルパスを取得するコードになります。

エクセル VBA ListView の OLEDragDropイベントとは(Excel VBA)

Private Sub UserForm_Initialize()
    With ListView1
        '■プロパティ設定
        .FullRowSelect = True           '行全体の選択
        .Gridlines = True               '行列グリッド線の表示
        .LabelEdit = lvwManual          'ラベル編集不可
        .OLEDropMode = ccOLEDropManual  'ファイルドロップ処理
        .View = lvwReport               '表示形式

        '■列見出しの名前・列幅の設定
        .ColumnHeaders.Add , "key1", "ファイル名", 100, lvwColumnLeft
        .ColumnHeaders.Add , "key2", "ファイルパス", 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 = Dir(Data.Files(i))    'ファイル名
                .SubItems(1) = Data.Files(i)  'ファイルパス
            End With
        Next i
    End With
End Sub
■■■スポンサーリンク■■■

OLEDragDropイベント

ListViewオブジェクトにファイルをドラッグ&ドロップした時に行われる動作を記載します。

ListViewオブジェクトOLEDropModeプロパティに「ccOLEDropManualが指定されている必要があります。

今回は、ListViewオブジェクトの OLEDragDropイベントプロシージャ 「Private Sub ListView1_OLEDragDrop」に、下記コードを記載しております。

ファイルをドロップするとListViewオブジェクトの既存データがクリアされ、新たにファイル名・ファイルパスが表示されます。

コードの内容・設定方法につきましてはエクセル VBA ListViewにドラッグ&ドロップでファイル名・ファイルパス複数の情報を取得(Excel VBA) をご参照ください。

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 = Dir(Data.Files(i))    'ファイル名
                .SubItems(1) = Data.Files(i)  'ファイルパス
            End With
        Next i
    End With
End Sub

OLEDropModeプロパティ

ファイルドロップ処理を行うか、行わないかを指定します。

ファイルドロップ処理を行う場合、OLEDropModeプロパティに「ccOLEDropManual」を指定し、ListViewオブジェクトの OLEDragDropイベントプロシージャ に、ファイルをドロップした際の動作を指定する必要があります。

ccOLEDropManual

ファイルをドロップした時、ListViewオブジェクトのOLEDragDropイベントプロシージャに記述した処理を行います。

ListView1.OLEDropMode = ccOLEDropManual

今回、ListViewオブジェクト「ListView1」の OLEDragDropイベントプロシージャ「Private Sub ListView1_OLEDragDrop」では、既存ファイルパスのクリアとファイル名・ファイルパスのリスト化の処理を行っています。

エクセル VBA ListView の OLEDragDropイベントとは(Excel VBA)

ccOLEDropNone

ファイルをドロップしても、ListViewオブジェクトの OLEDragDropイベントプロシージャに記述した処理は行われず、ファイルが開きます。

ListView1.OLEDropMode = ccOLEDropNone

エクセル VBA ListView の OLEDragDropイベントとは(Excel VBA)

【参考】

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)

■■■スポンサーリンク■■■