Liệt kê các tệp trong một thư mục bằng VBA trong Microsoft Excel
Trong bài viết này, chúng tôi sẽ tạo một macro để liệt kê tất cả các tệp trong thư mục.
Khi chạy macro, tên tệp cùng với đường dẫn tệp sẽ hiển thị bắt đầu từ ô A17.
Giải thích logic
Trong bài viết này, chúng tôi đã tạo hai macro, “subfolder_files” và “get_filelist_in_folder”.
Macro “subfolder_files” lấy đường dẫn thư mục và giá trị boolean làm đầu vào và trả về tên tệp trong thư mục.
“Get_filelist_in_folder” được sử dụng để gọi macro “subfolder_files”. Nó cung cấp giá trị đường dẫn thư mục tới macro, với giá trị boolean được đặt là ‘true’. Ngoài ra, khi tên tệp trong các thư mục con được yêu cầu, thì chúng tôi chỉ định giá trị boolean ‘true’.
Giải thích mã
folder_path = Sheet1.TextBox1.Value Đoạn mã trên được sử dụng để trích xuất giá trị chuỗi từ hộp văn bản.
Gọi subfolder_files (folder_path, True)
Đoạn mã trên được sử dụng để gọi macro “subfolder_files”. Nó chỉ định đường dẫn thư mục và đặt thuộc tính “include_subfolder” là true.
Đặt fso = CreateObject (“scripting.filesystemobject”)
Đoạn mã trên được sử dụng để tạo đối tượng của hệ thống tệp.
Đặt subfolder1 = fso.getfolder (folder_path)
Đoạn mã trên được sử dụng để tạo đối tượng của thư mục được xác định.
Đối với mỗi thư mục1 Trong thư mục con1. subfolder Gọi subfolder_files (thư mục1, True)
Tiếp theo Đoạn mã trên được sử dụng để xem qua tất cả các thư mục con, trong thư mục chính.
Dir (folderpath1 & “* .xlsx”)
Đoạn mã trên được sử dụng để lấy tên tệp excel.
Trong khi tên tệp <> “”
count1 = count1 + 1 ReDim Lưu trữ filearray (1 Đến đếm1)
filearray (count1) = filename filename = Dir ()
Wend Đoạn mã trên được sử dụng để tạo một mảng, bao gồm tất cả các tên tệp có bên trong thư mục.
Đối với i = 1 Tới UBound (filearray)
Các ô (cuối cùng, 1) .Value = folderpath1 & filearray (i)
lastrow = lastrow + 1 Tiếp theo Đoạn mã trên được sử dụng để gán tên tệp trong mảng cho sổ làm việc.
Vui lòng theo dõi bên dưới để biết mã
Option Explicit Sub subfolder_files(folderpath1 As Variant, Optional include_subfolder As Boolean) 'Checking whether to include subfolder or not If include_subfolder Then 'Declaring variables Dim filename, filearray() As String Dim lastrow, count1, i As Integer 'Checking whether folder path contain backslash as last character If Right(folderpath1, 1) <> "\" Then folderpath1 = folderpath1 & "\" End If 'Getting the filename of the first file in the defined folder path filename = Dir(folderpath1 & "*.xlsx") 'Getting the row number of last cell lastrow = ActiveCell.SpecialCells(xlCellTypeLastCell).Row + 1 count1 = 0 'Looping through all the files in the folder While filename <> "" count1 = count1 + 1 ReDim Preserve filearray(1 To count1) filearray(count1) = filename filename = Dir() Wend On Error GoTo last 'Adding file name to workbook For i = 1 To UBound(filearray) Cells(lastrow, 1).Value = folderpath1 & filearray(i) lastrow = lastrow + 1 Next End If last: End Sub Sub getting_filelist_in_folder() 'Declaring variables Dim folder_path As String Dim fso As Object, folder1, subfolder1 As Object 'Getting path of the folder folder_path = Sheet1.TextBox1.Value 'Checking whether folder path contain backslash as last character If Right(folder_path, 1) <> "\" Then folder_path = folder_path & "\" End If 'Calling subfolder_files macro Call subfolder_files(folder_path, True) 'Creating object of File system object Set fso = CreateObject("scripting.filesystemobject") Set subfolder1 = fso.getfolder(folder_path) 'Looping through each subfolder For Each folder1 In subfolder1.subfolders Call subfolder_files(folder1, True) Next End Sub
Nếu bạn thích blog này, hãy chia sẻ nó với bạn bè của bạn trên Facebook và Facebook.
Chúng tôi rất muốn nghe ý kiến từ bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi [email protected]