VBA Excel FileDialog设置/重置filter

我有一个macros,要求用户select多个文件进行数据分析。 用户首先selectExcel或CSV文件(XLSX,XLS,CSV),然后请求第二个文件但仅CSV。 该工具的目的是将两个数据文件合并为一个。

在一个Sub中,我要求用户使用FileDialog代码select任何兼容的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 

它似乎适当地过滤:

自定义Excel文件

完成此数据分析后,用户运行第二个子select另一个文件,但它只能是一个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 

问题是FileDialog框会记住第一个filter(自定义XLS),他们需要单击下拉菜单来查看适用于CSV的filter…

选择CSV

所以这肯定会让用户感到困惑…我猜我需要在用户完成第一个macros之后“清除”我们的第一个filter。 对该代码的任何build议,以清除(或重置)第一个filter?

试图添加下面的时候,当我发现我认为是一个类似的问题FileDialog坚持以前的filter :

 With .Filters .Clear End With 

但在编译错误的结果:无效或不合格的参考

这在我的环境中工作。 我唯一不同的是将对话声明为FileDialog而不是Object

 Sub Test() Dim myObj As FileDialog Dim myDirString As String Set myObj = Application.FileDialog(msoFileDialogFilePicker) With myObj .InitialFileName = "C:\Users\" & Environ$("Username") & "\Desktop" .Filters.Clear .Filters.Add "Custom Excel Files", "*.xlsx, *.csv, *.xls" .FilterIndex = 1 .Show End With Dim yourObj3 As FileDialog Dim yourDirString3 As String Set yourObj3 = Application.FileDialog(msoFileDialogFilePicker) With yourObj3 .InitialFileName = "C:\Users\" & Environ$("Username") & "\Desktop" .Filters.Clear .Filters.Add "CSV Files", "*.csv" .FilterIndex = 1 .Show End With End Sub