前景提要
之前我們學習了如何通過VBA遍歷我們指定的文件夾,通過此方法,我們可以很方便將某個文件夾中相關格式的文件全部打開並操作,節省了不少的時間和效率,不過我們也說了,上面的方法只能打開我們指定的某個文件夾的方法,意思就是,我們寫好的VBA代碼,每次都只能打開指定的文件夾的文件,但是其他文件夾的就不定,如果不小心換了名字,或者命名的時候多了一個空格或者是標點的話,程序就沒有辦法來執行了,有沒有什麼好的辦法,我們自己根據實際的需要來選擇我們想要的文件夾,然後系統自己執行後面的打開合併的操作呢?
思路
自然是可以的,我們一定都非常熟悉window的對話框吧,在你通過excel打開新的文件的時候,都會彈出一個對話框,讓你選擇你想要打開的文件,這樣功能確實是非常不錯,
如果我們在寫腳本的時候,也利用這個功能,靈活的選擇自己需要的文件夾,不就可以實現這樣的效果了嗎?
那麼VBA能否實現這樣的對話框功能呢?當然是可以的,對話框其實我們已經非常的熟悉了,今天帶著大家一起來使用下VBA中的對話框。
上代碼
這裡我們不需要指定對應的文件夾的位置了,通過對話框的窗口選擇我們想要打開的文件的位置,然後執行後面的匯總操作,因為這次主要介紹的是對話框的操作,所以打開文件等操作我們這裡就忽略了,保持代碼的簡短,方便大家閱讀,也利於大家獲得知識點。
Sub test()
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
If .Show = -1 Then
For x = 1 To .SelectedItems.Count
Debug.Print .SelectedItems(x)
Next x
Else
MsgBox "您未作出任何選擇,程序結束!"
Exit Sub
End If
End With
End Sub
代碼解析
With Application.FileDialog(msoFileDialogFilePicker)
********
End With
這一段代碼的作用就是打開我們前面所說的對話框,我們來進行調試下,看看是不是這樣的效果。
這裡我們可以看到我們已經成功的打開了文件選擇的對話框,我們可以根據自己的文件所在位置,選擇自己想要的文件,並不需要制定對應的文件所在的位置了,方便了很多。
If .Show = -1 Then
*******
Else
MsgBox "您未作出任何選擇,程序結束!"
Exit Sub
End If
這一段判斷就是判斷我們是否作出了選擇,既然對話框中有一個打開和一個取消的按鈕,自然我們也需要做出對應的判斷了,如果沒有做出選擇,我們還去執行後面的操作的話,程序可能會報錯的,我們之前也說過了,這樣的體驗感非常的不好,如果你拿給其他的同事用的話,其他同事可能會質疑你的能力和水平,這樣也會導致你的影響並不好,所以我們這裡要做出一個判斷,判斷的方法很簡單,如果選擇了打開的話,.Show = -1就是成立的,如果沒有,那就是錯誤的,程序就是執行彈窗提示,並直接強制結束程序,我們來試試。
當我點擊取消之後,程序並未執行後面的正常操作,而是執行了彈窗提醒的操作,完美的達到了我們的目的。
然後我們再來說說如果選擇了打開的話,後面的代碼的意思。
For x = 1 To .SelectedItems.Count
Debug.Print .SelectedItems(x)
Next x
我們既然是要匯總好多個文件,那麼我們選擇的時候,自然是需要選擇好多個文件了,這裡的.SelectedItems.Count代表的就是我們已經選擇的文件總數,通過之前的學習,我們知道,我們打開文件夾自然是需要完整的路徑了,那麼這裡完整的路徑要如何活動呢,也很簡單,.SelectedItems(x)就是每個文件的完整路徑,我們來一步步調試下,這樣更加清楚效果。
我們選擇了文件夾中的所有文件,也就是總數為3個,這裡.SelectedItems.Count的結果就是3,後面我們講通過for循環遍歷3次。
我們在每次遍歷的時候,都將文件夾的完整路徑,也是就是.SelectedItems(x)完整的輸出,也就是這樣的效果
如果我們想要執行打開的命名的話,就可以直接寫成
Workbooks.Open .SelectedItems(x)
完整代碼+注釋
Sub test()
With Application.FileDialog(msoFileDialogFilePicker) '打開對話框
.AllowMultiSelect = True
If .Show = -1 Then '判斷是否有選擇文件
For x = 1 To .SelectedItems.Count '遍歷循環開始
Debug.Print .SelectedItems(x) '輸出文件的完整路徑,實際操作中,可以轉換成為你想要的其他操作。
'Workbooks.Open .SelectedItems(x)
Next x
Else
MsgBox "您未作出任何選擇,程序結束!" '如果沒有做出選擇,彈窗提示,並且跳出程序。
Exit Sub
End If
End With
End Sub