Bằng cách sử dụng 2 hàm chức năng VBA dưới đây (với hai phương pháp khác nhau), ta có thể tìm được tệp gần đây nhất xuất hiện trong đường dẫn chứa tệp. Sẽ có 2 tiêu chí trong hàm cần phải thỏa mãn:
Nếu như không tồn tại đường dẫn nói trên hoặc không có loại tệp giống với tệp đã chọn thì hàm sẽ trả về kết quả là trống.
Phương pháp 1: Sử dụng hàm Dir
Để tìm được tên tệp, ta sử dụng câu lệnh dưới đây thông qua hàm Dir trong VBA. Phương pháp này đạt hiệu quả tối ưu cho tất cả các phiên bản Excel khác nhau.
Function NewestFile(Directory, FileSpec)
' Returns the name of the most recent file in a Directory
' That matches the FileSpec (e.g., "*.xls").
' Returns an empty string if the directory does not exist or
' it contains no matching files
Dim FileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
If Right(Directory, 1) <> "\" Then Directory = Directory & "\"
FileName = Dir(Directory & FileSpec, 0)
If FileName <> "" Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
Do While FileName <> ""
If FileDateTime(Directory & FileName) > MostRecentDate Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(Directory & FileName)
End If
FileName = Dir
Loop
End If
NewestFile = MostRecentFile
End Function
Phương pháp 2: Sử dụng chức năng FileSearch
Câu lệnh dưới đây sẽ sử dụng chức năng FileSearch, và điểm yếu của chức năng này là nó không hỗ trợ tất cả các phiên bản Excel. Tuy vậy, không giống như phương pháp trên, FileSearch sẽ cho ra kết quả bao gồm cả tên của tệp cần tìm lẫn địa chỉ đường dẫn chính xác của nó.
Lưu ý rằng kể từ phiên bản Office 2007, chức năng FileSearch đã bị lược bỏ.
Function NewestFile(Directory, FileSpec)
' Returns the full path and name of the most recent file in a Directory
' That matches the FileSpec (e.g., "*.xls").
' Returns an empty string if the directory does not exist or
' it contains no matching files
Dim NumFound As Long
NewestFile = ""
With Application.FileSearch
.NewSearch
.LookIn = Directory
.FileName = FileSpec
NumFound = .Execute(SortBy:=msoSortByLastModified, _
SortOrder:=msoSortOrderDescending)
If NumFound > 0 Then NewestFile = .FoundFiles(1)
End With
End Function
Ví dụ minh họa
Hàm NewestFile có thể được sử dụng như một câu lệnh trong VBA hoặc như công thức thông thường trong bảng tính Excel. Chẳng hạn, câu lệnh dưới đây sẽ cho ra kết quả là tên tệp Excel mới nhất xuất hiện trong đường dẫn “c:\myfiles\”
MsgBox NewestFile("c:\myfiles", "*.xls")
Kết quả nhận được cũng sẽ giống như trên nếu như ta sử dụng công thức Excel dưới đây:
=NewestFile("c:\myfiles", "*.xls")