- Tham gia
- 30/5/06
- Bài viết
- 1,798
- Được thích
- 4,706
- Giới tính
- Nam
Đếm số tập tin trong một thư mục - Count Files (with a specific extension or not) in a folder dùng Scripting.FileSystemObject
Chúng ta gặp rất nhiều câu hỏi dạng như:
Ví dụ này đã được kiểm tra với phiên bản Excel 2007. Do việc sử dụng hàm InStrRev nên hàm sau sẽ không được áp dụng cho Excel 97 (nhưng bây giờ tôi nghĩ chẳng ai dùng Excel 97 nhỉ)
Để sử dụng hàm ở trên:
Nguồn từ đây.
Tham khảo thêm tại:
Lê Văn Duyệt
Chúng ta gặp rất nhiều câu hỏi dạng như:
- Làm sao liệt kê các tập tin trong một thư mục.
- Làm sao tổng hợp các dữ liệu của các tập tin (cùng một định dạng) trong một thư mục.
Ví dụ này đã được kiểm tra với phiên bản Excel 2007. Do việc sử dụng hàm InStrRev nên hàm sau sẽ không được áp dụng cho Excel 97 (nhưng bây giờ tôi nghĩ chẳng ai dùng Excel 97 nhỉ)
Mã:
Private Function [COLOR="Red"][B]CountFiles[/B][/COLOR](strDirectory As String, Optional strExt As String = "*.*") As Double
'Tác giả : Ken Puls (www.excelguru.ca)
'Mục đích : để đếm số tập tin trong một thư mục. Nếu có cung cấp phần mở rộng của tập tin
' thì hàm chỉ đếm những tập tin có phần mở rộng này thôi.
Dim objFso As Object
Dim objFiles As Object
Dim objFile As Object
'Set Error Handling
On Error GoTo EarlyExit
'Tạo đối tượng [COLOR="Blue"]Scripting.FileSystemObject[/COLOR]
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFiles = objFso.GetFolder(strDirectory).Files
'Đếm các tập tin có thành phần mở rộng được cung cấp
'Nếu không cung cấp thì xem như đếm tất cả các tập tin.
If strExt = "*.*" Then
CountFiles = objFiles.Count
Else
For Each objFile In objFiles
[COLOR="Blue"] ' Sau này từ đây ta có thể xử lý các tập tin
' theo ý mình từ đây.
' Ví dụ như ta kiểm tra tên tập tin, rồi lấy nội dung tập tin...vv...[/COLOR]
If UCase(Right(objFile.Path, (Len(objFile.Path) - InStrRev(objFile.Path, ".")))) = UCase(strExt) Then
CountFiles = CountFiles + 1
End If
Next objFile
End If
EarlyExit:
'Giải phóng bộ nhớ
On Error Resume Next
Set objFile = Nothing
Set objFiles = Nothing
Set objFso = Nothing
On Error GoTo 0
End Function
Để sử dụng hàm ở trên:
- Gọi hàm này từ thủ tục khác như ví dụ Test sau đây sử dụng FileDialog (FileDialogFolderPicker không được dùng trong Excel 2000.)
- Xin chú ý rằng bạn phải cung cấp đường dẫn đầy đủ của thư mục.
- Các bạn phải vào cửa sổ VBE, chọn Tools ~~> References và chọn Microsoft Scripting Runtime (thông thường C:\Windows\System32\scrrun.dll)
Mã:
Sub Test()
'Tác giả : Ken Puls (www.excelguru.ca)
'Mục đích : Thử hàm CountFiles
Dim flDlg As FileDialog
Dim dblCount As Double
Set flDlg = Application.FileDialog(msoFileDialogFolderPicker)
flDlg.Show
dblCount = CountFiles(flDlg.SelectedItems(1))
Debug.Print dblCount
End Sub
Nguồn từ đây.
Tham khảo thêm tại:
- Tham khảo tại GPE.
- Tham khảo đối tượng FileSystemObject.
- Tham khảo thêm tại VBA Express.
- Tham khảo thêm tại VBForums.
- Tham khảo tại Erlandsendata.
- Tham khảo tại Ozgrid.
- BrowseForFolder hỗ trợ Unicode@Ngôn ngữ Việt Nam.
Lê Văn Duyệt
Lần chỉnh sửa cuối: