VBA ドラッグ アンド ドロップでファイルを指定させる


スポンサーリンク

VAB だけじゃなく、ファイルをドラッグ アンド ドロップ で指定できるのは便利です。
ワードプレスのメディアはすごく楽ですよね?

ローカルフォルダーにおいてある画像を直接ドラッグアンドドロップ。
ファイル選択だといちいちフォルダーを指定していかないといけないのが面倒。

CGIなどでは、javascript で実現させたけど、VBAでもやりたい。

ファイルをドラッグアンドドロップで指定させるのは結構簡単。

コントロールの追加


ListViewコントロールを使用するのですが、 ListView コントロールは標準では設定されていません。
ビジュアルベーシックのツール ⇒ その他のコントロール ⇒ MicroSoft ListView Control XX を選択します。
2017y04m01d_191844557


2017y04m01d_191911384


コントロールが追加されます。
2017y04m01d_191933957


コントロールを張り付ける


このListView コントロールを form へ張り付けます。
2017y04m01d_192029168



イベント処理の追加


ListView のイベント OLEDragDrop を作ります。
2017y04m01d_192856622


2017y04m01d_191911384


ListViewプロパティ


プロパティを設定します。
2017y04m01d_193450193

OLEDragModeプロパティ
ドラッグ操作を自分でプログラムを書くの(OLEDragManual)か、コンポーネントの処理に任せてしまう(OLEDragAutomatic)のかを指定します。

OLEDropModeプロパティ
 ドロップ時の操作をシカト(OLEDropNone)するのかプログラムを書くのか(OLEDropManual)を指定します。

ドラッグはコンポーネントに任せてオケ。ドロップは自分でプログラムを書きます。
よって、
OLEDragModeプロパティ:OLEDragAutomatic
OLEDropModeプロパティ:OLEDropManual
ということになります。

※MultiSelect プロパティに気を付けよう。複数ドロップを処理する場合 True にしておく。


ドロップされた時のプログラム


Private Sub ListView1_OLEDragDrop( _
    Data As MSComctlLib.DataObject, _
    Effect As Long, _
    Button As Integer, _
    Shift As Integer, _
    x As Single, _
    y As Single)

    Dim LineText As String
    Dim AllText As String
    Dim i

    If Data.Files.Count > 0 Then
        For i = 1 To Data.Files.Count
            AllText = AllText & Data.Files(i) & vbNewLine
        Next i
        ListViewGetArea.Text = AllText <- テキストエリアへファイル名の一覧を書きだす
    End If
END SUB

vba ListView 「ここにドラッグアンドドロップしてください」の文字をいれる



    ListView1.ListItems.Add.Text = "ここにドラッグアンドドロップしてください"

スポンサーリンク