今日的內(nèi)容是“VBA之EXCEL應用”的第三章“工作簿()和工作表()對象()”中第四節(jié)“跨工作表計算器的實現(xiàn)”。“VBA之EXCEL應用”這套教程從簡單的錄制宏的講解,一直到窗體的搭建,內(nèi)容豐富,案例眾多。大家可以非常容易的掌握相關(guān)的知識數(shù)據(jù)結(jié)構(gòu)讀取文件,這套教程面向初學人員,共三冊,十七章,都是我們在利用EXCEL工作過程中需要掌握的知識點,希望大家能掌握利用。
第五節(jié) 循環(huán)提取某目錄下的所有文件
大家好,在上一講中,我們講了如何提取已經(jīng)打開工作薄的名稱和工作簿所有工作表的名稱,那么如何提取某個目錄文件夾下面的所有文件并同時提取文件的所有工作表名稱呢(這講我們單就EXCEL文件進行提取)?在這講中,我們將學習到Dir函數(shù)及Do While循環(huán),并再次展示給大家對象的層次結(jié)構(gòu)。
1 循環(huán)提取某目錄下的所有文件的實用場景分析
在當前路徑下有個“提取文件”的文件夾,其下有若干個文件,如下圖:
我們要提取出其中的EXCEL文件,并將每個文件的名稱及每個文件的所有工作表名稱提取出來回填到當前的工作表中。
2 提取文件夾中文件的VBA代碼思路分析
為了提取文件夾中的Excel文件及每個文件的工作表名稱,我們要在文件夾中建立一個循環(huán),在循環(huán)中取得每個文件的文件名,然后打開這個文件,最后利用上節(jié)的方法得到文件的工作表名稱。
上述信息得到后數(shù)據(jù)結(jié)構(gòu)讀取文件,可以將信息回填給工作表。
這里要求提取到的是Excel類型的文件,所以我們在提取文件的時候要注意文件類型,同時為了提高程序的運行效率,我們可以關(guān)閉電腦的屏幕刷新功能。下面我們將逐步講解上述思路的實現(xiàn)過程。
3 Dir 函數(shù)的講解
我們先來看看一個函數(shù):Dir 函數(shù),這個函數(shù)返回一個 ,它表示與指定模式或文件屬性或驅(qū)動器的卷標匹配的文件、目錄或文件夾的名稱。
語法:
Dir [ (, [ ] ) ]
參數(shù):
1)可選。 指定文件名的字符串表達式,可包括目錄或文件夾和驅(qū)動器。 如果未找到 ,則返回零長度字符串 ("")。
2)可選。 其和指定文件屬性的常量或數(shù)值表達式。 如果省略它,則返回與 匹配但沒有屬性的文件。
參數(shù)設(shè)置為:
常量值 說明
(默認)指定沒有屬性的文件。
指定只讀文件以及不帶屬性的文件。
指定隱藏文件以及不帶屬性的文件。
4指定系統(tǒng)文件以及不帶屬性的文件。 在 上不可用。
指定卷標;如果指定任何其他屬性,則忽略 。 在 上不可用。
指定目錄或文件夾以及不帶屬性的文件。
指定文件名為別名。 僅在 上可用。
4 DO WHILE 循環(huán)講解
我們來詳細看看在VBA中利用的第二種循環(huán)語句DO WHILE 循環(huán):
1)語法:
Do { While | Until }
[ ]
[ Do ]
[ ]
[ Exit Do ]
[ ]
Loop
或者
Do
[ ]
[ Do ]
[ ]
[ Exit Do ]
[ ]
Loop { While | Until }
2)參數(shù)說明:
① Do 必需。 開始循環(huán)的定義 Do 。
② While 必選項(除非使用了Until)。 重復循環(huán),直到 為False。
③ Until必選項(除非使用了 While)。 重復循環(huán),直到 為True。
④ 可選。 表達式。 如果 為 ,則 Basic 將其視為 False 。
⑤ 可選。 一個或多個重復的語句,或在之前重復 True 。
⑥ Do可選。 將控制轉(zhuǎn)移到循環(huán)的下一次迭代 Do 。
⑦ Exit Do可選。 將控制轉(zhuǎn)移到 Do 循環(huán)外。
⑧ Loop必需。 終止循環(huán)的定義 Do 。
使用說明:
3)Do...Loop 如果希望在滿足條件之前重復執(zhí)行一組語句,請使用此結(jié)構(gòu)。如果要在判斷條件之后將一組語句重復執(zhí)行一定次數(shù),則可以使用 While 或 Until 來指定 ,但不能同時使用兩者。 只能在循環(huán)的開頭或結(jié)尾測試一次。
4) Do...Loop 結(jié)構(gòu)和do While 語句的區(qū)別在于 在循環(huán)的開頭或結(jié)尾進行測試。
5)Exit Do語句可以提供退出 Do…Loop的替代方法。Exit Do 將控制代碼立即傳輸?shù)絃oop
語句后面的語句。
6)Exit Do 通常在計算某些條件后(例如在結(jié)構(gòu)中)使用 If...Then...Else。如果檢測到可能導致不必要或無法繼續(xù)迭代的條件(如錯誤值或終止請求),則可能需要退出循環(huán)。Exit Do的另一種用途是測試可能導致無限循環(huán)的情況,這是一個可運行很大甚至無限次數(shù)的循環(huán)。這時可以使用Exit Do 來轉(zhuǎn)義循環(huán)。
7)可以在程序中的任意位置使用任意數(shù)量的 Exit Do 語句,在嵌套循環(huán)內(nèi)使用時Exit Do 將控制轉(zhuǎn)移出最內(nèi)層循環(huán),并將其轉(zhuǎn)移到下一個更高的嵌套級別。
5 實現(xiàn)提取文件夾中文件的代碼及代碼運行效果
有了上面的知識點講解,我們來看下面的代碼:
Sub mynzJ() '循環(huán)提取某目錄下的所有文件
Dim As , As , As
. = False '關(guān)閉屏幕更新
= .Path & "\提取文件\"
= Dir( & "*.xl??") '使用Dir函數(shù)來查找存儲在此目錄中的第一個文件*.xl??,變量現(xiàn)在保存在目錄中找到的第一個Excel文件的名稱
Do While ""
i = i + 1
j = 2
Cells(i, 1) = '提取文件名
.Open ( & ) '從關(guān)閉的Excel文件中提取數(shù)據(jù)(或工作表名稱)沒有簡單的方法。因此,我們打開Excel文件
For Each In (). '將Excel文件的所有工作表名稱添加到第i行的其他列中。
.(7).Cells(i, j).Value = .Name
j = j + 1
Next
().Close '關(guān)閉Excel文件。
= Dir() 'Dir函數(shù)是一個特殊函數(shù)。要獲取其他Excel文件,您可以再次使用Dir函數(shù)而不帶參數(shù)。
Loop
. = True '再次啟用屏幕更新
End Sub
代碼截圖:
代碼的講解:
1)這講的代碼和上一講的代碼思路類似,只是多了一個DIR函數(shù)的文件名提取。
2)為了提取到EXCEL文件我們利用了Dir( & "*.xl??")的格式,寫法要注意,如果不需要值提取EXCEL文件,我們就可以直接用Dir( & "*.*")即可。
下面看一個代碼的執(zhí)行效果:
這樣就完全提取出來了文件夾中的excel文件。
今日內(nèi)容回向:
1) Dir函數(shù)的意義是什么?
2) 如何利用dir函數(shù)提取指定的類型文件?
3) do循環(huán)的格式是怎樣的,意義是什么?
4) 如何提取文件夾中的EXCEL文件的文件名及工作表名稱并回填給工作表?
本講內(nèi)容參考程序文件:工作簿03.xlsm