Nhờ mọi người giúp mình đoạn code xóa file word trong thư mục chỉ chừa lại 100 file (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nhdphong

Thành viên mới
Tham gia
19/2/14
Bài viết
28
Được thích
2
Mình có thiết kế 1 tiện ích làm hồ sơ theo nguyên tắc là nhập dữ liệu bên excel và xuất ra các mẫu biểu bên word, đồng thời file word này sẽ được sao lưu trong 1 thư mục chỉ định đính kèm. Tuy nhiên số lượng file word này ngày càng tăng lên làm chiếm bộ nhớ quá. Mong mọi người giúp mình 1 đoạn code mỗi khi mở file excel lên là tự động kiểm tra và xóa bớt chỉ chừa lại 100 file gần nhất. Kính mong mọi người giúp đỡ mình vấn đề này, xin chân thành cảm ơn.
 
tự động xóa luôn cũng nguy hiểm lắm bạn ạ. để an toàn, tui đề nghị thế này:

a/ liệt kê toàn bộ file chứa trong thư mục vào một listbox, tự động đánh dấu (check) 100 files cuối cùng.
b/ xóa tất cả các files không được đánh dấu.

bạn có thể kiểm tra lại hay delete luôn là tùy.

lưu ý:

- vì listbox tự động sắp xếp theo tên file, nên tên các file xuất ra nên gắn với thời gian tạo file (chẳng hạn theo cú pháp: -yymmddhhmmss.

- trong file đính kèm tui đã làm hết phần a/ còn việc xoá file thì bạn tự xử nhé. (nhớ sửa path trong userform1 cho đúng với thư mục của bạn)
 

File đính kèm

Upvote 0
Mình có thiết kế 1 tiện ích làm hồ sơ theo nguyên tắc là nhập dữ liệu bên excel và xuất ra các mẫu biểu bên word, đồng thời file word này sẽ được sao lưu trong 1 thư mục chỉ định đính kèm. Tuy nhiên số lượng file word này ngày càng tăng lên làm chiếm bộ nhớ quá. Mong mọi người giúp mình 1 đoạn code mỗi khi mở file excel lên là tự động kiểm tra và xóa bớt chỉ chừa lại 100 file gần nhất. Kính mong mọi người giúp đỡ mình vấn đề này, xin chân thành cảm ơn.
Bạn mở file ra và sửa lại đoạn DuongDan = ThisWorkbook.Path
Ví dụ: DuongDan = "D:\LuuTru" ( phải có dấu nháy kép nha)
Sau đó đóng file lại rồi mở file lên, code sẽ tự chạy và xoá file cần xoá.
Tự chịu trách nhiệm nha
PHP:
Sub GetFile()
Dim ObjFSO As Object, ObjFile As Object
Dim DuongDan As String, ListToDelete(), FileList(1 To 65536, 1 To 2)
Dim FileToKeep As Long, i As Long, k As Long
Set ObjFSO = CreateObject("Scripting.FileSystemObject")
DuongDan = ThisWorkbook.Path
FileToKeep = 100
With ObjFSO.Getfolder(DuongDan)
   For Each ObjFile In .Files
      If ObjFSO.GetExtensionName(ObjFile.Name) Like "doc*" Then
         If Left(ObjFile.Name, 1) <> "~" Then
            If ObjFile.Name <> ThisWorkbook.Name Then
                k = k + 1
                FileList(k, 1) = ObjFSO.GetFileName(ObjFile)
                FileList(k, 2) = Format(ObjFile.Datecreated, "dddd-dd-mmm-yyyy hh:mm")
            End If
         End If
      End If
   Next
End With
If k > FileToKeep Then
    [A2].Resize(k, 2) = FileList
    Range([A1], [B65536].End(3)).Sort [B1], Header:=1
    ListToDelete = Range([A2], [B65536].End(3)).Value
    For i = 1 To UBound(ListToDelete) - FileToKeep
        ObjFSO.deletefile DuongDan & "\" & ListToDelete(i, 1), 1
    Next
End If
[A2:B65536].ClearContents
End Sub
 

File đính kèm

Upvote 0
...
PHP:
...                FileList(k, 1) = ObjFSO.GetFileName(ObjFile)
                FileList(k, 2) = Format(ObjFile.Datecreated, "dddd-dd-mmm-yyyy hh:mm")
...
    [A2].Resize(k, 2) = FileList
    Range([A1], [B65536].End(3)).Sort [B1], Header:=1
    ListToDelete = Range([A2], [B65536].End(3)).Value
    For i = 1 To UBound(ListToDelete) - FileToKeep
        ObjFSO.deletefile DuongDan & "\" & ListToDelete(i, 1), 1
    Next
...
End Sub

Định dạng ngày như trên thì sort sẽ không ra theo thứ tự ngày tháng. Những files thứ Sáu (Fri) sẽ đứng đầu và thứ Tư (Wed) sẽ đứng cuối.

Hoặc dùng Time serial như số để sort. Hoặc nếu đổi ra text thì dùng dang "yyyymmdd hhmm" (tối thiểu phải là dạng có năm đi trước rồi đến tháng, ngày)

Nếu sort theo chiều ngược (descending) thì dùng vòng lặp
For i = FileToKeep + 1 to UBound(ListToDelete)
trông nó rõ hơn.
 
Upvote 0
Cảm ơn mọi người đã giúp đỡ, mấy nay công việc bận rộn quá nên không có thời gian để lên đây, mình sẽ áp dụng vào chương trình, có gì vướng mắc mong mọi người giúp đỡ
 
Upvote 0
Bạn mở file ra và sửa lại đoạn DuongDan = ThisWorkbook.Path
Ví dụ: DuongDan = "D:\LuuTru" ( phải có dấu nháy kép nha)
Sau đó đóng file lại rồi mở file lên, code sẽ tự chạy và xoá file cần xoá.
Tự chịu trách nhiệm nha

Bạn ơi cho mình hỏi, chổ DuongDan nếu trong thư mục đính kèm thì mình đặt đường dẫn như thế nào vậy (không có ký tự ổ đĩa)
 
Upvote 0
Đọc câu hỏi chẳng hiểu bạn muốn gì nữa. "trong thư mục đính kèm" là cái gì vậy?

Mình làm được rồi, ý mình nói là làm sao để đường dẫn không bị giới hạn bởi ổ đĩa đó bạn, để mình có thể chép sang sử dụng ở nhiều máy. 1 lần nữa cảm ơn đã giúp mình %#^#$
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có thiết kế 1 tiện ích làm hồ sơ theo nguyên tắc là nhập dữ liệu bên excel và xuất ra các mẫu biểu bên word, đồng thời file word này sẽ được sao lưu trong 1 thư mục chỉ định đính kèm. Tuy nhiên số lượng file word này ngày càng tăng lên làm chiếm bộ nhớ quá. Mong mọi người giúp mình 1 đoạn code mỗi khi mở file excel lên là tự động kiểm tra và xóa bớt chỉ chừa lại 100 file gần nhất. Kính mong mọi người giúp đỡ mình vấn đề này, xin chân thành cảm ơn.
Bạn cho mình file này được ko? mình cũng đang cần thiết kế 1 cái như bạn nói để sử dụng cho công việc....
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom