- ベストアンサー
VBAでドラッグ・アンド・ドロップ
エクスプローラからファイルを選択して、ワードもしくはエクセルにD&Dしファイル名を取得したいと思います。 VBだとOleDragDropでいけるようですが、VBAにはこのイベントがありません。 ということは、無理ってことなのでしょう赤?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Excelしかやったことがありませんが、エクスプローラを開いて、ドラッグ&ドロップすれば、ふつう、そのままでいけるはずですが? それにチェック機能をつけるのでしたら、Office では、ユーザーフォームの[ツール]メニューの、[その他のコントロール]で、Microsoft Listview Control (SP4) があるかと思います。そのListview Control に 以下のように、OleDragDrop イベントをつければよいと思います。 以下のコードでは、Explorer は、自分で閉じてください。 Excelの場合。 サンプルコード '<UserFormモジュール以外> Sub uformShow() Dim myPath As String, myID As Double myPath = ThisWorkbook.Path myID = Shell("Explorer.exe /e, /root," & myPath, vbNormalFocus) If myID = 0 Then Exit Sub UserForm1.Show 0 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 With Me AppActivate Me.Caption .ListView1.ListItems.Clear If Data.Files.Count < 1 Then Exit Sub For i = 1 To Data.Files.Count If InStrRev(Data.Files(i), "xls") > 0 Then Workbooks.Open (Data.Files(i)) Else MsgBox "Excelの標準ファイルではありません。", vbCritical End If Next i End With End Sub Private Sub UserForm_Activate() With Me.ListView1 .OLEDragMode = 1 .OLEDropMode = 1 .View = 2 End With End Sub
その他の回答 (2)
- piyo2000
- ベストアンサー率49% (144/293)
>VBだとOleDragDropでいけるようですが FormにVBのコントロールを貼り付ける、という手がありますね。 VB6のPictureBoxあたりでUserControlを作って、OleDragDropイベントを継承していれば実現できますが、ExcelやWord単体だと難しいかもしれませんね。 ちなみにOleDragDropを持っているDataGridをFormに貼り付けて、DragModeをManualにすれば取得は可能でした。
補足
こんにちは、どうもありがとうございます。 VB6の入っていない環境もあるので、 Application.Dialogs(xlDialogOpen).Show あたりでファイルを指定することにします。 また、よろしくお願いします。
- hana-hana3
- ベストアンサー率31% (4940/15541)
フォーム(経由)を使えば可能かも BeforeDragOver イベント BeforeDropOrPaste イベント DataObject オブジェクト
補足
ありがとうございます。 どうもForm上のDragOverした時点でXで進入禁止っぽいです。 (涙;
お礼
ListViewにOleのイベントがあったんですね。 こっちらでも確認できました。 どうもありがとうございました。 また、よろしくお願いします。