我想学习一个新技巧,但我不是 100% 有信心这在 VBA 中是可能的,但我想我应该向这里的专家咨询一下。
我想做的是避开老式的 getopenfilename 或浏览器窗口(在我们的网络驱动器上设置起始目录确实很困难),我想创建一个 VBA 用户表单,其中用户可以将文件从桌面或浏览器窗口拖放到窗体上,VBA 将加载文件名和路径。再次,我不确定这是否可能,但如果是的话,或者是否有人在我之前完成过它,我将不胜感激。我知道如何设置用户表单,但除此之外我没有任何实际代码。如果我可以提供什么,请告诉我。
感谢您的时间和考虑!
最佳答案
我找到了实现这一目标的方法。据我所知,这只能使用 TreeView 控件来完成。您可能必须右键单击工具箱才能找到并添加它。它将位于“附加控件”或类似的内容下。除了控件之外,您还需要两件事。
在UserForm_Initialize
子中,您将需要以下代码行来启用拖放:TreeView1.OLEDropMode = ccOLEDropManual
:
UserForm_Initialize()
TreeView1.OLEDropMode = ccOLEDropManual
End Sub
然后您将需要 Private 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
的引用
我还添加了示例代码。
关于excel - VBA将文件拖放到用户窗体中以获取文件名和路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20569959/