excel - VBA将文件拖放到用户窗体中以获取文件名和路径

标签 excel vba drag-and-drop userform

我想学习一个新技巧,但我不是 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/

相关文章:

reactjs - 加载文件项后如何仅从 dataTransfer 调度 FileList

iphone - 如何在 iPhone 中将标签拖放到 UIToolbarItem 上

c# - 拖动时比较 WinForms 控件位置

vba - 在后台打开 CSV 文件并检索工作表名称

ruby - 如何使用 Applescript 遍历 Excel 中的所有行?

c# - 使用 C# 和 ASP.NET 将数据从 Excel 文件导出到 SQL Server 表的最佳方法?

Excel VBA - 选择不按顺序排列的多列

vba - 当您按下 "Calculate Now"时,包含相互复制的 VBA 项目和工作表的工作簿显示错误的单元格值

excel - 使用 office 脚本从另一个 excel 工作簿中读取数据

excel - 防止 VBA 中的覆盖警告