VBA Dir 函數使用說明 | 讀取檔案資料夾內的所有檔案

vba-dir

VBA 的 Dir 函數為 directory(目錄) 的縮寫,是 VBA 的內建函數。該函數主要功能為【回傳指定”檔案”或是”檔案資料夾”的名稱】,回傳值為字串資料型態。搭配 VBA 語法,Dir 函數可以發揮強大功能,比如:判斷檔案是否存在取得檔案目錄內的所有檔案及資料夾名稱讀取檔案目錄內的所有檔案。本文以經常出現的使用情境作為範例,說明如何使用 Dir 函數。

Dir 函數語法說明

Dir( [PathName], [Attributes])

備註:所有引數都是選用

  • PathName:指定目錄路徑。如果 Dir 函數找不到或是無法讀取目錄路徑名稱,會回傳空字串。
  • Attributes:指定檔案類型。Dir 函數只會查找並回傳指定檔案類型的檔案名稱。設定值請參考 Microsoft 文件

範例說明

下圖的檔案資料夾及檔案為說明範例,本文以經常遇到的使用情境,說明如何使用 Dir 函數

dir_folder

範例 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 變數是否為我們要查找的檔案名稱
dir_file_exists

範例 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 變數
7Do While 會持續迴圈直到 FileName 變數為空字串。(當 Dir 函數查找完所有檔案,最後會回傳空字串)
8所有檔案名稱輸入至 AllFileName 變數
9呼叫 Dir 函數,將下一個查找到的檔案名稱輸入至 FileName 變數
dir function all files

範例 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 變數
7Do While 會持續迴圈直到 FileName 變數為空字串。(當 Dir 函數查找完所有檔案,最後會回傳空字串)
8呼叫 Workbooks.open 函數,合併 PathName 及 FileName 變數,開啟檔案
9呼叫 Dir 函數,將下一個查找到的檔案名稱輸入至 FileName 變數

如果本篇文章有幫助到你,請在下方拍手圖示按 5 下。只要花幾秒鐘登入 Google 或 FB 帳號,不需任何花費就能提供我實質的回饋,支持我繼續創作,謝謝

發表迴響