2013-12-13 135 views
7

我想學習一個新的技巧,但我不是100%自信它可能在VBA中,但我認爲我會檢查大師這裏。VBA將文件拖放到用戶窗體以獲取文件名和路徑

我想要做的是避開古老的getopenfilename或瀏覽器窗口(它很難讓我們的網絡驅動器上的起始目錄設置),我想創建一個VBA用戶表單用戶可以從桌面或窗體上的瀏覽器窗口拖放文件,VBA將加載文件名和路徑。再次,我不確定這是否可能,但如果是的話,或者如果有人已經做到了,我會欣賞指針。我知道如何設置用戶表單,但除此之外我沒有任何真實的代碼。如果有什麼我可以提供的,請告訴我。

感謝您的時間和考慮!

+1

找到了答案並回答了我自己的問題先生Downboats,無論你是誰。 – MattB

回答

12

我想出了一個方法來實現這一點。據我所知,它只能使用樹視圖控件來完成。您可能必須右鍵單擊您的工具箱才能找到並添加它。它會在「附加控制」或類似的地方。除了控件外,您還需要兩件事情。

UserForm_Initialze子,你需要下面的代碼行以啓用拖放:「TreeView1.OLEDropMode = ccOLEDropManual」:

UserForm_Initialize() 
    TreeView1.OLEDropMode = ccOLEDropManual 
End Sub 

然後,你將需要「私人小組TreeView1_OLEDragDrop」事件。我省略了所有參數以節省空間。他們應該很容易找到。在該子文件中,只需聲明一個字符串,也許strPath或類似的東西來保存文件名和路徑,並設置strPath = Data.Files(1),並將獲得用戶拖動到TreeView控件的文件的文件名和路徑。這假定用戶一次只拖動一個文件,但據我所知,如果您嘗試使用拖動多個文件,應該可以做到這一點。

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)數組來獲得多個文件路徑。嘗試像'For intCounter = 1到UBound(Data.Files)'這裏'intCounter'是一個整數,並使用'strPath = Data.Files(intCOunter)'檢索所有文件路徑。應該管用。 – MattB

0

馬特的解決方案是偉大的,只需要確保:

需要補充的是支持OLEDragDrop操作TreeView控件:

右擊顯示所有可用控件工具箱區域。 選擇「其他控件...」 包括:「Microsoft TreeView控件,版本6.0」

相關問題