【发布时间】:2018-01-02 02:49:16
【问题描述】:
我有一个宏要求用户选择多个文件进行数据分析。用户首先选择 Excel 或 CSV 文件(XLSX、XLS、CSV),然后要求提供第二个文件,但仅限 CSV。该工具的目的是将两个数据文件合二为一。
在一个 Sub 中,我要求用户使用 FileDialog 代码选择任何兼容的 XLSX、XLS 或 CSV 文件:
Dim myObj As Object
Dim myDirString As String
Set myObj = Application.FileDialog(msoFileDialogFilePicker)
With myObj
.InitialFileName = "C:\Users\" & Environ$("Username") & "\Desktop"
.Filters.Add "Custom Excel Files", "*.xlsx, *.csv, *.xls"
.FilterIndex = 1
If .Show = False Then MsgBox "Please select Excel file.", vbExclamation: Exit Sub
myDirString = .SelectedItems(1)
End With
似乎过滤得当:
完成此数据分析后,用户运行第二个 sub 以选择另一个文件,但它必须是一个 CSV 文件。所以我使用这段代码来请求 CSV:
Dim yourObj3 As Object
Dim yourDirString3 As String
Set yourObj3 = Application.FileDialog(msoFileDialogFilePicker)
With yourObj3
.InitialFileName = "C:\Users\" & Environ$("Username") & "\Desktop"
.Filters.Add "CSV Files", "*.csv"
.FilterIndex = 1
If .Show = False Then MsgBox "Please select CSV file.", vbExclamation: Exit Sub
yourDirString3 = .SelectedItems(1)
End With
问题是文件对话框会记住第一个过滤器(自定义 XLS),他们需要单击下拉菜单才能看到仅适用于 CSV 的适当过滤器...
所以这肯定会让用户感到困惑......我猜我需要在用户完成第一个宏之后“清除”我们的第一个过滤器。关于清除(或重置)第一个过滤器的代码有什么建议吗?
当我发现我认为是类似的问题FileDialog persists previous filters时尝试在其下方添加:
With .Filters
.Clear
End With
但导致编译错误:无效或不合格的引用
【问题讨论】:
-
使用
.Filters对象的.Filters属性的.Clear方法有效,所以我能想到的只是你没有将With .Filters放在With yourObj3块中。