Nhờ viết code lọc các file theo thời gian tạo / hiệu chỉnh

Liên hệ QC

trchau

Thành viên mới
Tham gia
4/9/11
Bài viết
44
Được thích
29
Tôi muốn nhờ các bạn giúp hoàn chỉnh file excel để lấy tất cả tên các file theo thời gian tạo / hiệu chỉnh trong folder mà mình chỉ định.
Hiện mới chỉ lấy được list từ code của bạn ndu, chưa lọc theo thời gian được.

Trong folder mẹ có thể có các file và các folder con, trong folder con lại có các file khác.

Nhưng để đơn giản, bước đầu các bạn giúp phần code lọc chỉ trong folder chỉ định thôi, bỏ qua folder con (nếu có).

Bạn nào biết giúp tôi với nhé! Cám ơn!
 
Lần chỉnh sửa cuối:
Tôi muốn nhờ các bạn giúp hoàn chỉnh file excel để lấy tất cả tên các file theo thời gian tạo / hiệu chỉnh trong folder mà mình chỉ định.
Hiện mới chỉ lấy được list từ code của bạn ndu, chưa lọc theo thời gian được.

Trong folder mẹ có thể có các file và các folder con, trong folder con lại có các file khác.

Nhưng để đơn giản, bước đầu các bạn giúp phần code lọc chỉ trong folder chỉ định thôi, bỏ qua folder con (nếu có).

Các bạn xem minh họa trong file đính kèm.

Bạn nào biết giúp tôi với nhé! Cám ơn!


Tặng bạn File Excel tạo link đến các File chứa trong 1 Folder bất kỳ (kể cả Folder đó có chứa các Folder con).
Khi tạo Link xong có tên file, dung lượng file, loại file, ngày tạo. Trong file tôi chỉ chứa nội dung còn link thì đã xóa nên bạn phải chạy lại để lấy link mới.
 

File đính kèm

  • Macro Link File.rar
    151.1 KB · Đọc: 416
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn be09, file của bạn gần đúng ý tôi, vấn đề còn lại là làm sao lọc ra những file thỏa điều kiện về thời gian hiệu chỉnh.
Cụ thể là trong folder của tôi có rất nhiều file, tôi cần lọc và tạo link đến các file có thời gian tạo / chỉnh sửa trong khoảng thời gian từ ngày d1 đến ngày d2.
Trong khi tìm cách tùy biến từ file của bạn - đang thử dùng hàm DateValue(FileDateTime(Pathname)), bạn nào có thể gợi ý hay làm giúp mình luôn cho nhanh?
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn be09, file của bạn gần đúng ý tôi, vấn đề còn lại là làm sao lọc ra những file thỏa điều kiện về thời gian hiệu chỉnh.
Cụ thể là trong folder của tôi có rất nhiều file, tôi cần lọc và tạo link đến các file có thời gian tạo / chỉnh sửa trong khoảng thời gian từ ngày d1 đến ngày d2.
Trong khi tìm cách tùy biến từ file của bạn - đang thử dùng hàm DateValue(FileDateTime(Pathname)), bạn nào có thể gợi ý hay làm giúp mình luôn cho nhanh?
Bạn vui lòng nói rõ thêm: Lọc theo thời gian file được tạo (DateCreated) hay theo thời gian chỉnh sửa (DateLastModified)?
 
Upvote 0
Bạn vui lòng nói rõ thêm: Lọc theo thời gian file được tạo (DateCreated) hay theo thời gian chỉnh sửa (DateLastModified)?
Cảm ơn ndu, có sự phân biệt này sao? tôi nghĩ nếu file tạo ra và không có sự chỉnh sử thì coi như DateCreated cũng là DateLastModified ? Còn nếu có sự chỉnh sửa thì DateLastModified thay thế cho DateCreated, và như vậy chỉ cần quan tâm đến DateLastModified ?
Hôm qua về mày mò tùy biến mãi cũng tạm ổn (với khả năng hạn chế của tôi), hiện chỉ lọc theo DateLastModified, còn như ndu muốn lọc cả 2 điều kiện DateCreated & DateLastModified có được không hay chỉ 1 trong 2?
Nhờ các bạn tham khảo file đính kèm và giúp tôi hoàn hiện thêm nhé.
Cảm ơn.
 

File đính kèm

  • Loc_file_theo_thoi_gian.rar
    11 KB · Đọc: 92
Upvote 0
Cảm ơn ndu, có sự phân biệt này sao? tôi nghĩ nếu file tạo ra và không có sự chỉnh sử thì coi như DateCreated cũng là DateLastModified ? Còn nếu có sự chỉnh sửa thì DateLastModified thay thế cho DateCreated, và như vậy chỉ cần quan tâm đến DateLastModified ?
Tôi lọc theo DateLastModified nhé:
1> Hàm hổ trợ
Mã:
Function GetListFile(ByVal Folder As String, ByVal Search As String, ByVal InSub As Boolean)
  Dim sComm As String, tmp As String, tmpFile, Arr
  On Error Resume Next
  If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
  Folder = """" & Folder & """"
  With CreateObject("Scripting.FileSystemObject")
    tmpFile = .GetTempName
    sComm = "DIR " & Folder & "*" & Search & "* /ON /B /A-D " & IIf(InSub, "/S", " ") & " >" & tmpFile
    CreateObject("Wscript.Shell").Run "cmd /u /c " & sComm, 0, True
    With .OpenTextFile(tmpFile, 1, , -2)
      tmp = Trim(.ReadAll)
      If Right(tmp, 2) = vbCrLf Then tmp = Left(tmp, Len(tmp) - 2)
      If Len(tmp) Then GetListFile = Split(tmp, vbCrLf)
      .Close
    End With
  End With
  Kill tmpFile
End Function
Hàm này dùng để lấy toàn bộ tên file trong 1 thư mục
2> Code chính:
Mã:
Sub Main()
  Dim sFolder, aFile, fleItem, n As Long, t As Double
  Dim Search As String
  Dim fDat As Long, eDat As Long, cDat As Double
  On Error Resume Next
  fDat = Range("B2").Value
  eDat = Range("B3").Value
  With CreateObject("Shell.Application")
    sFolder = .BrowseForFolder(0, "", 1).Self.Path
  End With
  t = Timer
  If TypeName(sFolder) = "String" Then
    Range("A6:C60000").Clear
    Range("B4").Value = sFolder
    [COLOR=#0000cd][B]Search = "*.xls" [/B][/COLOR] ''<--- Muon lay loai file nao, chinh cái này
    aFile = GetListFile(sFolder, Search, True)
    If IsArray(aFile) Then
      ReDim Arr(1 To UBound(aFile) + 1, 1 To 3)
      For Each fleItem In aFile
        With CreateObject("Scripting.FileSystemObject")
          [B]cDat = .GetFile(fleItem).[COLOR=#ff0000]DateLastModified[/COLOR][/B]
        End With
        If cDat >= fDat And cDat <= eDat Then
          n = n + 1
          Arr(n, 1) = n
          Arr(n, 2) = fleItem
          Arr(n, 3) = cDat
        End If
      Next
      If n Then
        With Range("A6:C6").Resize(n)
          .Value = Arr
          .Borders.LineStyle = 1
          .Resize(, 1).Offset(, 2).NumberFormat = "dd-MMM-yyyy hh:mm:ss"
        End With
        MsgBox "Tim thay " & n & " files", , "(" & Format(Timer - t, "0.000s") & ")"
      Else
        MsgBox "Khong tim thay file nao!"
      End If
    Else
      MsgBox "Khong tim thay file nao!"
    End If
  End If
End Sub
Lưu ý:
- Chổ màu đỏ nếu sửa thành DateCreated thì sẽ lấy theo ngày tạo
- Chổ màu xanh đang lấy theo các file có đuôi xls. Nếu muốn lấy toàn bộ file, sửa chổ này thành Search = "*.*"
- Chỉ cần 1 nút nhấn là chạy luôn (không cần phải 2 nút đâu)
------------------------------
còn như ndu muốn lọc cả 2 điều kiện DateCreated & DateLastModified có được không hay chỉ 1 trong 2?
Nhờ các bạn tham khảo file đính kèm và giúp tôi hoàn hiện thêm nhé.
Cảm ơn.
Lọc 2 tiêu chí cũng được nhưng bạn phải suy nghĩ lại: Trường hợp DateCreated nằm ngoài giới hạn thời gian còn DateLastModified nằm trong giới hạn thì tính sao? Hay cả 2 tiêu chí này phải nằm trong giới hạn thời gian cho trước mới lấy?
Nói chung, dù muốn gì thì code cũng đã có, cứ thế mà sửa lại như ý muốn thôi
-------------------------------
Nhờ các bạn tham khảo file đính kèm và giúp tôi hoàn hiện thêm nhé.
Cảm ơn.
Code của bạn chỉ lấy trong thư mục chỉ định thôi, không lấy trong thư mục con đâu nha!
 

File đính kèm

  • Loc_file_theo_thoi_gian.xls
    39 KB · Đọc: 77
Upvote 0
Tôi thử với file bạn sửa thấy chạy tốt rồi.
Cũng không phải dễ nuốt, nhưng phải cố mà hiểu code của bạn để còn tùy biến theo nhu cầu...
Có gì vường mắc tôi sẽ nhờ lại bạn sau.
Cảm ơn rất nhiều.
 
Upvote 0
Tôi thử với file bạn sửa thấy chạy tốt rồi.
Cũng không phải dễ nuốt, nhưng phải cố mà hiểu code của bạn để còn tùy biến theo nhu cầu...
Có gì vường mắc tôi sẽ nhờ lại bạn sau.
Cảm ơn rất nhiều.
Thấy dài thế chứ cũng rất đơn giản:
- Đẩu tiên hàm GetListFile sẽ lấy toàn bộ danh sách file cho vào 1 mảng. Bạn cũng không cần phải quan tâm hàm này viết gì, chỉ cần biết cho các biến như tên thư mục, loại file cần lấy vào là được
- Xong, đã có mảng chứa tên file rồi, bạn thích làm gì tùy ý
- Code ở Sub Main tuy dài vì phân nhiều công đoạn: 1> Mở hợp Browse For Folder để bạn chọn thư muc, 2> lấy tên file, 3> Duyệt các file trong mảng, xét điều kiện giới hạn thời gian rồi chuyển các Item thỏa điều kiện vào 1 mảng khác (có thêm phần đánh STT), 4> Nạp mảng kết quả vào sheet + format cells
vân vân... Bạn cư xem từng đoạn code ngắn sẽ thấy không khó hiểu lắm đâu!
 
Upvote 0
Tặng bạn File Excel tạo link đến các File chứa trong 1 Folder bất kỳ (kể cả Folder đó có chứa các Folder con).
Khi tạo Link xong có tên file, dung lượng file, loại file, ngày tạo. Trong file tôi chỉ chứa nội dung còn link thì đã xóa nên bạn phải chạy lại để lấy link mới.

Cho em hỏi trong file của bác be09 ấy có "cái chỗ" hiển thị đường dẫn thư mục ấy là cái gì vậy?//
Em muốn tạo ra nó, xóa bỏ nó thì làm ntn?

Cám ơn bác nhé.
 
Upvote 0
Tặng bạn File Excel tạo link đến các File chứa trong 1 Folder bất kỳ (kể cả Folder đó có chứa các Folder con).
Khi tạo Link xong có tên file, dung lượng file, loại file, ngày tạo. Trong file tôi chỉ chứa nội dung còn link thì đã xóa nên bạn phải chạy lại để lấy link mới.
Thầy cho em xin pass code được ko ạ
 
Upvote 0
Web KT
Back
Top Bottom