如何提示用户在 VBA 中选择文件位置以将文件合并到一个工作簿中
Posted
技术标签:
【中文标题】如何提示用户在 VBA 中选择文件位置以将文件合并到一个工作簿中【英文标题】:How to prompt user to select file location in VBA to merge files into one workbook 【发布时间】:2022-01-23 09:22:42 【问题描述】:我正在努力编写提示用户使用 FileDialog 选择文件夹路径的工作代码,但无法将其与将所需文件导入打开工作簿的另一个例程集成。以下是我到目前为止的代码,但我需要提示用户,而不是预先确定文件夹路径:
Sub MergeCsvFilesToWb()
Dim FolderPath As String
Dim Filename As String
Dim Sheet As Worksheet
Dim fldr As FileDialog
Application.ScreenUpdating = False
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select the Folder where the '.csv' files are located."
.AllowMultiSelect = False
.Show
End With
FolderPath = fldr.SelectedItems(1)
Filename = Dir(FolderPath & "*.csv*")
Do While Filename <> ""
Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet
Workbooks(Filename).Close
Filename = Dir()
Loop
Application.ScreenUpdating = True
End Sub
感谢任何帮助
【问题讨论】:
请编辑您的问题并包括您使用FileDialog
的尝试
@RaymondWu 现在更新了
调试您的代码并确保变量msoFileDialogFolderPicker
具有有效值(非零)。如果变量不存在,VB 不会警告你。你能解释一下当你尝试这样做时会发生什么意想不到的事情吗?
如果您查看FileDialog
documentation(它是object documentation)及其示例,您会看到SelectedItems
属性包含所选文件夹/文件的集合。由于文件夹选择器只允许您选择 1 个文件夹,请尝试 FolderPath = fldr.SelectedItems(1)
会弹出文件对话框,但是一旦我选择了文件夹,文件就不会导入工作簿(新添加的行)。 @RaymondWu
【参考方案1】:
FileDialog
中选择的文件/文件夹可以在SelectedItems
属性中找到 (Documentation)
所以要将变量FolderPath
分配给选定的文件夹:
Dim fldr As FileDialog
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select the Folder where the '.csv' files are located."
.Show
Dim FolderPath As String
FolderPath = .SelectedItems(1)
End With
请注意,您应该处理用户未在对话框中选择任何文件夹(单击Cancel
)的事件,以便更好的版本是:
Dim fldr As FileDialog
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select the Folder where the '.csv' files are located."
.Show
Dim FolderPath As String
If .SelectedItems.Count <> 0 Then
FolderPath = .SelectedItems(1)
Else
'Code to handle event that nothing is selected
'e.g.
'Exit Sub
End If
End With
最后,返回的文件夹路径末尾没有斜杠,因此您需要:
将Filename = Dir(FolderPath & "*.csv*")
修改为Filename = Dir(FolderPath & "\*.csv*")
将FolderPath = .SelectedItems(1)
修改为FolderPath = .SelectedItems(1) & "\"
【讨论】:
以上是关于如何提示用户在 VBA 中选择文件位置以将文件合并到一个工作簿中的主要内容,如果未能解决你的问题,请参考以下文章
VBA EXCEL提示用户响应选择文件夹并将路径作为字符串变量返回[重复]