• ベストアンサー

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

  • 【VBA Excel】ドラッグアンドドロップをしたい

    (A) ExcelのVBAのListBox(か、類似のVBA機能)を使用してファイル(.csvファイルのデータ)の一覧を作成し、ドラッグアンドドロップ/D&Dで元エクセルシートに落としたセルを起点とし、選択したファイル内のデータを展開するデータを作ろうとしています。その際に分からないことが2点あります。 (A1) 他のワードファイルにはドドロップが有効なのですが、元エクセルファイルにはなぜかカーソルが例の進入禁止マーク(?)化してドロップできません。どうすれば元エクセルファイルにデータをドロップ出来るようになるのでしょうか? (A2) さらに、ドロップした後のセル("A3"や"B6"とか)の求め方が分かりません。 Private Sub ListBox1_MouseMove(ByVal Button As Integer, _  ByVal Shift As Integer, _  ByVal x As Single, _  ByVal y As Single) でx,yが座標を示すことは分かるのですが、ここからセルに変換するすべはあるのでしょうか? (B) また、Aで詰まったときに考えたのですが、ListBoxを表示させる代わり、に別シートに件のファイル一覧を展開して元シートと別シートを並べて表示させ(Windows.Arrange xlArrangeStyleVerticalを使用)、別シートから元シートにファイル名をドラッグアンドドロップしたときに同じ処理をするのもありかな、と思いついたのですが… (B1) Workbookの中の"SheetBeforeDoubleClick"や"Workbook_BeforeSave"が出ているリストの中にドラッグアンドドロップを示すようなものがないのですが、当該の処理は出来ないのでしょうか? -------------------- 当方、Excel2007のVBAを使用しています。 長文になりましたが、AまたはBのどちらかが解決する必要があります。断片的な答えでも大歓迎です。お願いします!

  • VBA超初心者です。

    VBA超初心者です。 ファイル名の取得をしたいと思っています。 フォームからディレクトリを選択し、選択したディレクトリから ファイル名を取得し、OPENしたいのですが、 教えていただけないでしょうか。 すみません、超初心者がこの質問をするのはずうずうしいのかも知れませんが… Excel 2003(VB6.0)です。 何卒よろしくお願いいたしたします。

  • Excel VBA ファイル名をドラッグ&ドロップ

    エクスプローラーなどからファイルをドラッグ&ドロップしたら そのファイルに対して何かしらの処理を行う、ということがEXCEL で可能でしょうか。 ドロップを受けるのはシートでもフォーム上のコントロールでも どちらでも良いです。 イベントをいろいろ探したのですがよく分かりませんでした。 EXCELは2002を使用しています。 よろしくお願いいたします。

  • アプリケーション間のドラッグアンドドロップ

    お世話になります。VC++2005を使用しています。 ウィンドウを生成し、その中に複数の画像をそれぞれ子ウィンドウで表示し、 その子ウィンドウを他の実行ファイルのウィンドウにドラッグアンドドロップして ファイル名を渡したいと考えています。 また、子ウィンドウをWindowsのエクスプローラのような感覚で 複数選択したりできたらと思っています。 このようなことは可能でしょうか? また可能でしたらキーワードだけでも教えていただけないでしょうか。

  • エクセルでドラッグアンドドロップで読み取り専用として開く

    Excel2000です。 エクスプローラ上にエクセルのファイル(.xls)が表示されているとします。 そのファイルをExcel上にドラッグアンドドロップしますと、ファイルが開かれます。 そのときに、エクスプローラ上のそのファイルのプロパティで「読み取り専用」になっているか否かにかかわらず、読み取り専用として開くにはどうすればよいですか? なお、エクセルのメニューの ファイル―開く で出てくるダイアログボックス(「ファイルを開く」)から、読み取り専用として開く方法はわかっています。 その「読み取り専用として開く」と同じことを、ドラッグアンドドロップだけでしたいのです。 OSはWindows98SEです。

  • MFCを使わずファイルをドラッグアンドドロップ

    エクスプローラーなどからドラッグしてきたファイルのパス一覧を MFCを使わず取得したいのですが、 どうすればいいのでしょうか?

  • VisualBasicドラッグ&ドロップ

    VisualBasic2010 Express環境での質問です。 業務用ツールとしてある情報の含まれるdatファイルを フォームのDataGridにD&Dすると内部の情報を 項目ごとにDataGridに入れて表示するプログラムを作成しています。 現在、1ファイルでは上手く動く状態です。 複数ファイルの場合にドラッグしたファイル名を取得したいのですが どのように取得すればよいのでしょうか?

  • ドラッグアンドドロップでファイルを読み込む方法を教えて下さい。

    一応いま手元にあるのはVB.NET2003なのですが、 これを使って複数のファイルから指定した行の内容をコピーして出力するプログラムを作りたいと考えています。 そのためには 1.ファイルをドラッグアンドドロップしてファイルの内容を読み込む 2.読み込んだ内容を順番に出力する機能が必要になります。 それでドラッグアンドドロップによりファイルを読み込む記述を探しているのですが、 http://www.atmarkit.co.jp/fdotnet/dotnettips/676dragdrop/dragdrop.html ここにあるように、 1.フォームのAllowDropプロパティをTrueに設定する 2.フォームのDragEnterイベント・ハンドラを記述する 3.フォームのDragDropイベント・ハンドラを記述する ということを順番に行えば良いわけですが、1番はもちろん分かりますが、2番と3番がどうして良いのか分かりません。 本屋で一通りVBの本を見てみたのですが、どの本にもドラッグアンドドロップについて書かれてある本はありませんでした。 検索などすると、確かにDragEnter、DragDropに関する記述は見つかるのですが、難しくてどうしても理解出来ません。 どなたか易しく教えて頂けないでしょうか? よろしくお願い致します。

  • Windows7でドラッグ&ドロップが出来ない

    数年前からOSがWindows7のPCを使用しています。 今までなんの不自由なく、快適にPCを操作出来ていたのですが、つい最近になって、(特にエクスプローラ上で)ドラッグ&ドロップ(以下「D&D」と表記)が出来なくなってしまいました。 PCを起動し立ての時は出来るのですが、PCを操作し始めてしばらく(2,3時間程度?)すると、また唐突にD&Dが出来なくなります。 (ファイル自体はクリックで選択出来るが、ドラッグが一切出来ない) PCを再起動すると、最初はまた出来るようになりますが、また時間が経つと唐突に出来なくなってしまいます。 私個人でもネットでいろいろ調べて、以下の方法を試しましたが、どれも解決に結びつける事が出来ませんでした・・・。 ・マウスを新品に取り換える ・タスクマネージャで「explorer.exe」を終了させて、再び「explorer.exe」を管理者として実行する。 (この方法を実行した場合、再起動と同様に最初は上手く動作するようになるが、時間が経てばまたD&Dが出来なくなる) ・コマンドプロンプトにて「sfc /scannow」を実行し、システムファイルを修復する。 D&Dが出来ないとここまで不便なのかと、実感しています。 どうにかして解決させたいので、皆さんのお知恵をお借り出来ないでしょうか? 宜しくお願い致します。

  • エクセルのVBAについて

    エクセルのVBAについて教えて下さい。 エクセルのVBAでプログラムを組んでいるのですが、一つわからないことがあるのです。 マクロが実行(オープン)されるファイル名(ファイルパス)をVBAで取得するためにはどうすればいいでしょうか? たとえば、マクロが実行されるファイルがC:\テスト.xlsならば "C:\テスト.xls"を取得したいと考えています。 どなたかご教授お願い致します。 宜しくお願い致します。