• ベストアンサー

VBAでドラッグ・アンド・ドロップ

エクスプローラからファイルを選択して、ワードもしくはエクセルにD&Dしファイル名を取得したいと思います。 VBだとOleDragDropでいけるようですが、VBAにはこのイベントがありません。 ということは、無理ってことなのでしょう赤?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

noname#27115
質問者

お礼

ListViewにOleのイベントがあったんですね。 こっちらでも確認できました。 どうもありがとうございました。 また、よろしくお願いします。

その他の回答 (2)

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.2

>VBだとOleDragDropでいけるようですが FormにVBのコントロールを貼り付ける、という手がありますね。 VB6のPictureBoxあたりでUserControlを作って、OleDragDropイベントを継承していれば実現できますが、ExcelやWord単体だと難しいかもしれませんね。 ちなみにOleDragDropを持っているDataGridをFormに貼り付けて、DragModeをManualにすれば取得は可能でした。

noname#27115
質問者

補足

こんにちは、どうもありがとうございます。 VB6の入っていない環境もあるので、 Application.Dialogs(xlDialogOpen).Show あたりでファイルを指定することにします。 また、よろしくお願いします。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

フォーム(経由)を使えば可能かも BeforeDragOver イベント BeforeDropOrPaste イベント DataObject オブジェクト

noname#27115
質問者

補足

ありがとうございます。 どうもForm上のDragOverした時点でXで進入禁止っぽいです。 (涙;

関連するQ&A