VBA ドラッグ アンド ドロップでファイルを指定させる
ワードプレスのメディアはすごく楽ですよね?
ローカルフォルダーにおいてある画像を直接ドラッグアンドドロップ。
ファイル選択だといちいちフォルダーを指定していかないといけないのが面倒。
CGIなどでは、javascript で実現させたけど、VBAでもやりたい。
ファイルをドラッグアンドドロップで指定させるのは結構簡単。
コントロールの追加
ListViewコントロールを使用するのですが、 ListView コントロールは標準では設定されていません。ビジュアルベーシックのツール ⇒ その他のコントロール ⇒ MicroSoft ListView Control XX を選択します。
コントロールが追加されます。
コントロールを張り付ける
このListView コントロールを form へ張り付けます。イベント処理の追加
ListView のイベント OLEDragDrop を作ります。ListViewプロパティ
プロパティを設定します。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 = "ここにドラッグアンドドロップしてください"
スポンサーリンク