Chào các bạn,
Dạo này mình đang phải làm việc với rất nhiều file Excel nằm chung trong một thư mục. Mỗi lần cần xem lại danh sách các file đó để mở, mình lại phải mở thư mục ra xem rất mất thời gian. Vì vậy, mình đã mày mò và viết một đoạn code VBA nhỏ để tự động hóa việc này.
Code này sẽ giúp bạn liệt kê tất cả các file Excel (có đuôi .xls, .xlsx, .xlsm) trong một thư mục cụ thể và xuất danh sách đó ra một sheet mới trong file Excel hiện tại. Rất tiện lợi phải không?
Code VBA:
Sub ListFilesInFolder()
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim folderPath As String
Dim ws As Worksheet
Dim rowNum As Long
' Yêu cầu người dùng chọn thư mục
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Chọn thư mục chứa file Excel"
.AllowMultiSelect = False
If .Show -1 Then Exit Sub
folderPath = .SelectedItems(1)
End With
' Kiểm tra xem đường dẫn có kết thúc bằng dấu \ hay không
If Right(folderPath, 1) "\" Then folderPath = folderPath & "\"
' Tạo đối tượng FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderPath)
' Thêm một sheet mới để chứa danh sách file
On Error Resume Next
Set ws = ThisWorkbook.Sheets("DanhSachFile")
If ws Is Nothing Then
Set ws = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "DanhSachFile"
Else
ws.Cells.ClearContents
End If
On Error GoTo 0
' Ghi tiêu đề
ws.Cells(1, 1).Value = "Tên file"
ws.Cells(1, 1).Font.Bold = True
rowNum = 2
' Duyệt qua tất cả các file trong thư mục
For Each file In folder.Files
' Chỉ lấy các file Excel có đuôi .xls, .xlsx, .xlsm
If LCase(fso.GetExtensionName(file.Name)) = "xls" Or _
LCase(fso.GetExtensionName(file.Name)) = "xlsx" Or _
LCase(fso.GetExtensionName(file.Name)) = "xlsm" Then
ws.Cells(rowNum, 1).Value = file.Name
rowNum = rowNum + 1
End If
Next file
' Tự động điều chỉnh độ rộng cột
ws.Columns("A").AutoFit
MsgBox "Đã tạo xong danh sách file Excel trong thư mục: " & folderPath, vbInformation
' Giải phóng đối tượng
Set file = Nothing
Set folder = Nothing
Set fso = Nothing
Set ws = Nothing
End Sub
Cách sử dụng:
- Mở file Excel bạn muốn tạo danh sách.
- Nhấn
Alt + F11để mở cửa sổ VBA Editor. - Vào
Insert > Module. - Copy và paste đoạn code trên vào cửa sổ Module.
- Chạy macro bằng cách nhấn
F5hoặc vàoView > Macros, chọnListFilesInFoldervà nhấnRun. - Một hộp thoại sẽ hiện ra yêu cầu bạn chọn thư mục. Chọn thư mục chứa các file Excel bạn muốn liệt kê.
- Một sheet mới tên là "DanhSachFile" sẽ được tạo ra với danh sách các file Excel trong thư mục đó.
Hy vọng đoạn code này hữu ích cho mọi người. Nếu có câu hỏi hoặc muốn cải tiến gì thêm, mọi người cứ thảo luận nhé!