25/05/2018, 23:30

Cách tìm tệp gần đây nhất xuất hiện trong một địa chỉ đường dẫn

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: Directory: Địa chỉ đầy đủ của đường dẫn mà bạn cần quan tâm (ký tự dạng String). Ví dụ ...

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:

  • Directory: Địa chỉ đầy đủ của đường dẫn mà bạn cần quan tâm (ký tự dạng String). Ví dụ c:filesexcel
  • FileSpec: Tên loại tệp (ký tự dạng String). Ví dụ, ký tự “*.xls” dành cho các tệp bảng tính Excel, hoặc ký tự “*.*” dành cho tất cả các loại tệp.

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")
0