Excel VBA和文件夾-1.6遍歷文件夾打開指定格式的文件
前景提要
之前我們學會了如何通過dir()來遍歷文件夾并打開文件的方法,當你文件中有很多相同格式的文件要匯總的時候,就可以考慮采用這個方法了,不過實際工作中,我們總是會碰到很多種非常規的的問題,還是假設我們現在正在匯總文件夾中的數據,當我們使用上節我們學的dir()函數的時候, 會發現有些文件并不是excel文件,是一個圖片,甚至是txt文件都有,原來有些人為了圖方便,直接放在txt或者截個圖完事,這種數據是需要經過二次處理的,直接拿過來匯總是不可能的,那么dir()能不能夠指定就匯總某種類型的文件呢?
自然是可以的,這里采用的方法是類似正則的模糊匹配的方法
思路
老規矩,我們還是想象下,如果是我們人工操作的話,是如何區分的呢?很簡單,看看文件結尾的格式就知道了,就是*****.xlsx這后面的.xlsx,前面我們說了,這里我們采用類似正則的模糊匹配的方法(正則的具體用法后面會闡述,這里只需要了解當前場景下的使用方法就好),好了,可以上代碼了。
上代碼
這里假設我們的目標文件在D:新建文件夾-dir的目錄下,我們看看測試文件夾下面有各種不同的文件
Sub test()Dim FileName$FileName = "D:新建文件夾-dir"f = Dir(FileName & "" & "*.xlsx")Do While f <> "" Workbooks.Open FileName & "" & f Debug.Print f f = Dir() ActiveWorkbook.Close True Loop End Sub
為了更好的展示運行的效果,我們在測試代碼的時候,注銷掉了打開和關閉的命令,每找到一個文件就輸入文件的路徑,這樣就可以更加清楚的知道實際運行的效果了,結果如下圖:
代碼解析
得到的就是文件夾的路徑,這個我們在之前就已經解釋過了,然后來看看下一行
f = Dir(FileName & "" & "*.xlsx")
這段代碼和我們上一次的很像,確實是,非常像,僅僅是在后面增加了一點判斷而已,這個判斷就是*.xlsx,作用就是判斷文件是以.xlsx結果的,就是文件,這樣程序僅僅會去打開報表文件,而其他的無關文件或者是需要我們二次匯總的文件,都不會干擾本次程序的執行,完美的達到了我們的目的。
為了更加清楚的說明效果,下面我們來調試下程序,這樣能夠更加清楚明白程序運行的過程,按下F8,進入調試
我們可以看到程序直接去尋找那些文件名是.xlsx的文件,而不會去碰其他類型的文件,這樣很好的節省了我們的時間,也提升了效率,最終得到的結果,就是上面我們展示的那樣了。
其實,VBA不僅僅可以打開和操作報表文件,其實它還可以操作txt文件,那么如何打開txt文件,如何操作txt文件呢?這些懸念大家可以先研究下,后面我們講到VBA操作文本文件的時候,再和大家詳細說明。
完整代碼+注釋
Sub test()Dim FileName$FileName = "D:新建文件夾-dir" '指定文件夾路徑f = Dir(FileName & "" & "*.xlsx") '指定要遍歷的文件類型,以.xlsx結果,也可以換成.xls(07版本的文件)Do While f <> "" '便利開始 Workbooks.Open FileName & "" & f '打開 'Debug.Print f f = Dir() '循環下一個文件 ActiveWorkbook.Close True '關閉當前打開的文件LoopEnd Sub '結束程序
通過上述的例子,我們可以發現VBA還是非常的靈活和強大的,畢竟VBA本身是開發出來的腳本語言,雖然有局限性vba文件夾找不到,但是在文件本身的處理上面還是非常的強大的,平時需要花費很多時間的事情vba文件夾找不到,寫好了VBA之后,點幾下鼠標就可以搞定了,簡直就是辦公職場必備之良藥啊。
本人已經打算長期分享一些網絡搜集的各種VBA知識,如果大家有問題也可以提出來共同解決,一起進步,畢竟VBA的世界還是很大的。因為基本上都是自學的,很多代碼和知識都是來源于網絡的,如果在分享的過程中,正好拿了某位大神的代碼,請告訴我,我將標注代碼來源出處,也方便大家學習分享,謝謝!
=============================傳送門==============================
Excel VBA和文件夾-1.3創建當天日期命名的文件夾
Excel VBA和文件夾-1.4打開文件夾內excel文件的方法
Excel VBA和文件夾-1.5遍歷文件夾并打開