2017-07-26 307 views
0

我有一個宏,要求用戶選擇多個文件進行數據分析。用戶首先選擇一個Excel或CSV文件(XLSX,XLS,CSV),然後請求第二個文件但僅CSV。該工具的目的是將兩個數據文件合併爲一個。VBA Excel FileDialog設置/重置過濾器

在一個小組,我要求用戶選擇任何兼容XLSX,XLS,或使用FileDialog的代碼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 

這似乎是適當的篩選:

Custom Excel Files

完成此數據分析後,用戶運行第二個子選擇另一個文件,但它只能是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的會記住第一個過濾器(自定義XLS),他們需要點擊下拉菜單,查看CSV只有...

適當的過濾器

Select CSV

所以這肯定會造成用戶困惑......我猜我需要「明確」我們的用戶後,首先過濾器完成第一個宏。關於該代碼的任何建議,以清除(或重置)第一個過濾器?

嘗試添加此下方,當我發現了我認爲是一個類似的問題FileDialog persists previous filters

With .Filters 
.Clear 
End With 

但結果編譯錯誤:無效的或不合格的參考

+1

使用'FileDialog'對象的作品'.Filters'屬性的'.Clear'方法,因此,所有我能想到的是你沒有把'隨着.Filters'內你的'隨着yourObj3 '塊。 – YowE3K

回答

1

這工作在我的環境。我唯一不同的是聲明對話框爲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 
+0

@ YowE3K你是對的,我會編輯。 – VBobCat

+1

P.S.我懷疑這個問題真的是OP把'With .Filters'放在其他'With'塊之外,所以VBA不知道'.Filters'中的'.'是指什麼。該代碼可以工作,無論它是「對象」還是「FileDialog」。 – YowE3K

+0

你知道嗎?我想你是對的... – VBobCat