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
為了更好的展示運行的效果,我們在測試代碼的時候,注銷掉了打開和關閉的命令,每找到一個文件就輸入文件的路徑,這樣就可以更加清楚的知道實際運行的效果了,結果如下圖:
代碼解析
FileName得到的就是文件夾的路徑,這個我們在之前就已經解釋過了,然后來看看下一行
f = Dir(FileName & "\" & "*.xlsx")
這段代碼和我們上一次的很像,確實是,非常像,僅僅是在后面增加了一點判斷而已,這個判斷就是*.xlsx,作用就是判斷文件是以.xlsx結果的,就是office文件,這樣程序僅僅會去打開報表文件,而其他的無關文件或者是需要我們二次匯總的文件,都不會干擾本次程序的執行,完美的達到了我們的目的。
為了更加清楚的說明效果,下面我們來調試下程序,這樣能夠更加清楚明白程序運行的過程,按下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 '關閉當前打開的文件
Loop
End Sub '結束程序
通過上述的例子,我們可以發現VBA還是非常的靈活和強大的,畢竟VBA本身是window開發出來的腳本語言,雖然有局限性,但是在文件本身的處理上面還是非常的強大的,平時需要花費很多時間的事情,寫好了VBA之后,點幾下鼠標就可以搞定了,簡直就是辦公職場必備之良藥啊。