Excel VBA和文件夾-1.6遍歷文件夾打開指定格式的文件
前景提要
之前我們學(xué)會了如何通過dir()來遍歷文件夾并打開文件的方法藏鹊,當(dāng)你文件中有很多文件要匯總的時候赔嚎,就可以考慮采用這個方法了膘盖,不過實際工作中胧弛,我們總是會碰到很多種非常規(guī)的的問題,還是假設(shè)我們現(xiàn)在正在匯總文件夾中的數(shù)據(jù)侠畔,當(dāng)我們使用上節(jié)我們學(xué)的dir()函數(shù)的時候结缚, 會發(fā)現(xiàn)有些文件并不是excel文件,是一個圖片软棺,甚至是txt文件都有红竭,原來有些人為了圖方便,直接放在txt或者截個圖完事喘落,這種數(shù)據(jù)可能是需要經(jīng)過二次處理的茵宪,直接拿過來匯總是不可能的,那么dir()能不能夠指定就匯總某種類型的文件呢瘦棋?
自然是可以的稀火,這里采用的方法有點類似正則的方法
思路
老規(guī)矩,我們還是想象下赌朋,如果是我們?nèi)斯げ僮鞯脑捇四侨绾螀^(qū)分的呢?很簡單箕慧,看看文件結(jié)尾的格式就知道了服球,就是*****.xlsx這后面的.xlsx,前面我們說了颠焦,這里我們采用類似正則的模糊查詢的方法(正則的具體用法后面會闡述斩熊,這里只需要了解當(dāng)前緩解下的使用方法就好),好了伐庭,可以上代碼了粉渠。
上代碼
這里假設(shè)我們的目標(biāo)文件在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
為了更好的展示運行的效果,我們在測試代碼的時候圾另,注銷掉了打開和關(guān)閉的命令霸株,每找到一個文件就輸入文件的路徑,這樣就可以更加清楚的知道實際運行的效果了集乔,結(jié)果如下圖:
代碼解析
FileName得到的就是文件夾的路徑去件,這個我們在之前就已經(jīng)解釋過了,然后來看看下一行
f = Dir(FileName & "\" & "*.xlsx")
這段代碼和我們上一次的很像扰路,確實是尤溜,非常像,僅僅是在后面增加了一點判斷而已汗唱,這個判斷就是*.xlsx宫莱,作用就是判斷文件是以.xlsx結(jié)果的,就是office文件哩罪,這樣程序僅僅會去打開報表文件授霸,而其他的無關(guān)文件或者是需要我們二次匯總的文件巡验,都不會干擾本次程序的執(zhí)行,完美的達到了我們的目的碘耳。
為了更加清楚的說明效果显设,下面我們來調(diào)試下程序,這樣能夠更加清楚明白程序運行的過程藏畅,按下F8敷硅,進入調(diào)試
我們可以看到程序直接去尋找那些文件名是.xlsx的文件,而不會去碰其他類型的文件愉阎,這樣很好的節(jié)省了我們的時間绞蹦,也提升了效率,最終得到的結(jié)果榜旦,就是上面我們展示的那樣了幽七。
這樣稍微留一個小懸念,VBA不僅僅可以打開和操作報表文件溅呢,其實它還可以操作txt文件澡屡,那么如何打開txt文件,如何操作txt文件呢咐旧?這些懸念大家可以先研究下驶鹉,后面我們講到VBA操作文本文件的時候,再和大家詳細說明铣墨。
完整代碼+注釋
Sub test()
Dim FileName$
FileName = "D:\新建文件夾-dir" '指定文件夾路徑
f = Dir(FileName & "\" & "*.xlsx") '指定要遍歷的文件類型室埋,以.xlsx結(jié)果,也可以換成.xls(07版本的文件)
Do While f <> "" '便利開始
Workbooks.Open FileName & "\" & f '打開
'Debug.Print f
f = Dir() '循環(huán)下一個文件
ActiveWorkbook.Close True '關(guān)閉當(dāng)前打開的文件
Loop
End Sub '結(jié)束程序
通過上述的例子伊约,我們可以發(fā)現(xiàn)VBA還是非常的靈活和強大的姚淆,畢竟VBA本身是window開發(fā)出來的腳本語言,雖然有局限性屡律,但是在文件本身的處理上面還是非常的強大的腌逢,平時需要花費很多時間的事情,寫好了VBA之后超埋,點幾下鼠標(biāo)就可以搞定了搏讶,簡直就是辦公職場必備之良藥啊。