2013-12-13 40 views
7

新しいトリックを学びたいと思いますが、VBAでは100%自信がありませんが、ここに。VBAファイルをユーザーフォームにドラッグアンドドロップしてファイル名とパスを取得する

私がしたいのは、古いgetopenfilenameまたはブラウザウィンドウ(私たちのネットワークドライブに設定されている開始ディレクトリを取得することは本当に難しいです)を避けて、私はVBAユーザーフォームを作成したいと思います。ユーザーはフォーム上のデスクトップまたはブラウザウィンドウからファイルをドラッグアンドドロップでき、VBAはファイル名とパスを読み込みます。繰り返しますが、これが可能かどうかはわかりませんが、もしそうであれば、あるいは誰かがそれをしてからポインタに感謝しています。私はユーザフォームを設定する方法を知っていますが、私はそれ以外には実際のコードを持っていません。私が提供できるものがあれば教えてください。

お時間をいただきありがとうございます。

+1

答えを見つけて、私自身の質問に答えました。 – MattB

答えて

12

私はこれを達成する方法を考え出しました。私が知る限り、それはツリービューコントロールを使用してのみ行うことができます。ツールボックスを右クリックして追加して追加する必要があるかもしれません。そこには「追加のコントロール」やそのようなものがあります。コントロールとは別に、2つのものが必要です。あなたがドラッグ&ドロップを可能にするために、次のコード行が必要になりますUserForm_Initialzeサブで

:「TreeView1.OLEDropMode = ccOLEDropManual」:

UserForm_Initialize() 
    TreeView1.OLEDropMode = ccOLEDropManual 
End Sub 

その後、あなたは「プライベートサブTreeView1_OLEDragDrop」イベントが必要になります。私はスペースを節約するためにすべてのパラメータを省略しました。彼らは見つけるのに十分なはずです。そのサブクラスで単に文字列を宣言するだけで、おそらくstrPathなどのファイル名とパスを保持し、strPath = Data.Files(1)と設定すると、ファイル名とユーザーがTreeViewコントロールにドラッグするファイルのパスが取得されます。これは、ユーザーが一度に1つのファイルだけをドラッグすることを前提としていますが、これを試してみると、複数のファイルをドラッグすることができるはずです。

Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) 
    StrPath = Data.Files(1) 
End Sub 

編集:あなたも私もサンプルコードを追加しましたMicrosoft Windows Common Controls 6.0

への参照を追加する必要があります。

+1

ありがとうございますこれは便利です!私は誰かがあなたに否定的なポイントを与える理由を理解していない...これは本当に迷惑である –

+0

複数のファイルをドラッグするためのいくつかのコードを投稿することができますか? –

+1

@ JoannaMikalai私は実際に複数のファイルでそれをやっていませんが、可能であると思います。私はあなたに最高の推測を与えます。 DragDropイベントは、インデックスが1から始まるdata.filesオブジェクトを生成します。そのため、私は 'Data.Files(1)'を使ってファイル名を取得しています。私はこれをテストしていないので、何も約束することはできませんが、Data.Files(1〜n)配列を繰り返して複数のファイルパスを取得できると仮定します。 'intCounter = 1〜UBound(Data.Files)'のようなものを試してください。 'intCounter'は整数で、' strPath = Data.Files(intCOunter) 'を使ってすべてのファイルパスを取得します。うまくいくはずです。 – MattB

0

マットのソリューションは素晴らしいですが、唯一のことを確認する必要があります。

は、操作をOLEDragDropサポートTreeViewコントロールを追加する必要があります。

右利用可能なすべてのコントロールを示すツールボックスエリアをクリックしてください。 "追加のコントロール..."を選択してください "Microsoftツリービューコントロール、バージョン6.0"

関連する問題