VBA将文件拖放到用户表单以获取文件名和路径

Mat*_*ttB 9 excel vba drag-and-drop userform

我想学习一个新的技巧,但我并不是100%自信在VBA中有可能,但我想我会在这里与大师核实.

我想要做的是避免使用古老的getopenfilename或浏览器窗口(在我们的网络驱动器上设置起始目录非常困难)并且我想创建一个用户可以拖动的VBA用户表单并从桌面或窗体上的浏览器窗口中删除文件,VBA将加载文件名和路径.同样,我不确定这是否可行,但如果是,或者如果有人在我欣赏指针之前已经完成了.我知道如何设置用户表单,但除此之外我没有任何真正的代码.如果有我能提供的东西,请告诉我.

感谢您的时间和考虑!

Mat*_*ttB 14

我想出了实现这一目标的方法.据我所知,它只能使用树视图控件来完成.您可能必须右键单击工具箱才能查找并添加它.它将在"额外控制"或类似的东西下.除了控件之外,你还需要两件事.

UserForm_Initializesub中,您将需要以下代码行来启用拖放操作 TreeView1.OLEDropMode = ccOLEDropManual:

UserForm_Initialize()
    TreeView1.OLEDropMode = ccOLEDropManual
End Sub
Run Code Online (Sandbox Code Playgroud)

那你就需要这个Private Sub TreeView1_OLEDragDrop活动.我省略了所有参数以节省空间.他们应该很容易找到.在那个sub中简单地声明一个字符串,可能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
Run Code Online (Sandbox Code Playgroud)

编辑:您还需要添加引用 Microsoft Windows Common Controls 6.0

我还添加了示例代码.