VBA 的 Dir 函數為 directory(目錄) 的縮寫,是 VBA 的內建函數。該函數主要功能為【回傳指定”檔案”或是”檔案資料夾”的名稱】,回傳值為字串資料型態。搭配 VBA 語法,Dir 函數可以發揮強大功能,比如:判斷檔案是否存在、取得檔案目錄內的所有檔案及資料夾名稱、讀取檔案目錄內的所有檔案。本文以經常出現的使用情境作為範例,說明如何使用 Dir 函數。
內容目錄
Dir 函數語法說明
Dir( [PathName], [Attributes])
備註:所有引數都是選用
- PathName:指定目錄路徑。如果 Dir 函數找不到或是無法讀取目錄路徑名稱,會回傳空字串。
- Attributes:指定檔案類型。Dir 函數只會查找並回傳指定檔案類型的檔案名稱。設定值請參考 Microsoft 文件。
範例說明
下圖的檔案資料夾及檔案為說明範例,本文以經常遇到的使用情境,說明如何使用 Dir 函數
範例 1 | 查找檔案是否存在
以下範例,我們輸入檔案的路徑以及名稱,使用 Dir 函數查找指定的檔案。依據 Dir 函數的回傳值,使用 If 判斷式及 MsgBox 函數,顯示該檔案是否存在
Sub Dir_File_Exist()
Dim PathName, FileName, FileCheck As String
PathName = "C:\Desktop\dir_pratice\"
FileName = "file1.xlsx"
FileCheck = Dir(PathName & FileName)
If FileCheck = FileName Then
MsgBox FileCheck & " 檔案存在"
Else
MsgBox FileName & " 檔案不存在"
End If
End Sub
行數 | 說明 |
---|---|
2 | 宣告變數 PathName、FileName、FileCheck 為字串資料型態 |
4 | 指定路徑,輸入至變數 PathName |
5 | 指定檔案名稱【file1.xlsx】,輸入至變數 FileName |
6 | 合併 PathName 及 FileName 變數,輸入至 Dir 函數。將 Dir 函數的回傳值輸入至 FileCheck 變數。如果檔案存在,Dir 函數會回傳檔案名稱;如果檔案不存在,Dir 函數會回傳空字串 |
8 | 使用 If 判斷式,判斷FileCheck 變數是否為我們要查找的檔案名稱 |
範例 2 | 取得檔案資料夾內的所有檔案名稱
以下範例,Dir 函數搭配使用 Do While 迴圈函數,查找檔案資料夾內的所有檔案名稱。搭配迴圈函數時,Dir 函數只需要在第一次輸入 PathName 引數,之後不需要再輸入,Dir 函數會依據之前輸入的 PathName 引數,尋找並回傳下一個檔案名稱
Sub Dir_Get_All_File_Names()
Dim PathName, FileName, AllFileName As String
PathName = "C:\Desktop\dir_pratice\"
FileName = Dir(PathName)
Do While FileName <> ""
AllFileName = AllFileName & FileName & vbCrLf
FileName = Dir()
Loop
MsgBox AllFileName
End Sub
行數 | 說明 |
---|---|
2 | 宣告變數 PathName、FileName、AllFileName 為字串資料型態 |
4 | 指定路徑,輸入至變數 PathName |
5 | 路徑輸入至 Dir 函數,將 Dir 函數查找到的檔案名稱回傳值輸入至 FileName 變數 |
7 | Do While 會持續迴圈直到 FileName 變數為空字串。(當 Dir 函數查找完所有檔案,最後會回傳空字串) |
8 | 所有檔案名稱輸入至 AllFileName 變數 |
9 | 呼叫 Dir 函數,將下一個查找到的檔案名稱輸入至 FileName 變數 |
範例 3 | 依序開啟檔案資料夾內的所有檔案
前次範例說明如何取得檔案資料夾內的所有檔案,我們可以搭配 Workbooks.open 函數,依序開啟所有檔案
Sub Dir_Open_All_Files()
Dim PathName, FileName As String
PathName = "C:\Desktop\dir_pratice\"
FileName = Dir(PathName)
Do While FileName <> ""
Workbooks.Open PathName & FileName
FileName = Dir()
Loop
End Sub
行數 | 說明 |
---|---|
2 | 宣告變數 PathName、FileName 為字串資料型態 |
4 | 指定路徑,輸入至變數 PathName |
5 | 路徑輸入至 Dir 函數,將 Dir 函數查找到的檔案名稱回傳值輸入至 FileName 變數 |
7 | Do While 會持續迴圈直到 FileName 變數為空字串。(當 Dir 函數查找完所有檔案,最後會回傳空字串) |
8 | 呼叫 Workbooks.open 函數,合併 PathName 及 FileName 變數,開啟檔案 |
9 | 呼叫 Dir 函數,將下一個查找到的檔案名稱輸入至 FileName 變數 |
如果本篇文章有幫助到你,請在下方拍手圖示按 5 下。只要花幾秒鐘登入 Google 或 FB 帳號,不需任何花費就能提供我實質的回饋,支持我繼續創作,謝謝