Lỗi xóa file bằng FSO (1 người xem)

Liên hệ QC

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

thanh.bq

Thành viên chính thức
Tham gia
2/6/17
Bài viết
66
Được thích
38
Giới tính
Nam
Chào mọi người
Em dùng FSO để xóa file theo list tên file trong excel nhưng khi xóa được khoảng 10 file thì bị lỗi "permission denied", các lần chạy macro sau đó thì không xóa được file nào nữa và cũng báo lỗi như thế. Làm thế nào để khắc phục lỗi này ạ? E dùng office 2013 64 bit
Cảm ơn mọi nguời.
 
Chào mọi người
Em dùng FSO để xóa file theo list tên file trong excel nhưng khi xóa được khoảng 10 file thì bị lỗi "permission denied", các lần chạy macro sau đó thì không xóa được file nào nữa và cũng báo lỗi như thế. Làm thế nào để khắc phục lỗi này ạ? E dùng office 2013 64 bit
Cảm ơn mọi nguời.
Thì lỗi nó rành rành thế bạn, bạn không có quyền xóa nó. Bạn xóa thủ công file đó có được không?
 
Upvote 0
Chào mọi người
Em dùng FSO để xóa file theo list tên file trong excel nhưng khi xóa được khoảng 10 file thì bị lỗi "permission denied", các lần chạy macro sau đó thì không xóa được file nào nữa và cũng báo lỗi như thế. Làm thế nào để khắc phục lỗi này ạ? E dùng office 2013 64 bit
Cảm ơn mọi nguời.
Góp ý cho bạn:
Bạn nên đính kèm File để người giúp còn hiểu bạn lấy danh sách File từ sheet nào? cột nào? lúc đó xem lại code trong File của bạn thì mới biết rõ nguyên nhân.
 
Upvote 0
Góp ý cho bạn:
Bạn nên đính kèm File để người giúp còn hiểu bạn lấy danh sách File từ sheet nào? cột nào? lúc đó xem lại code trong File của bạn thì mới biết rõ nguyên nhân.

mình up file lên mọi người xem thử giúp mình với
 

File đính kèm

Upvote 0
Sheet, cột chả liên quan gì. Thậm chí nếu lấy ở sheet, cột không chuẩn (lấy nhầm) và dữ liệu không ở dạng đường dẫn tập tin hay có dạng đường dẫn nhưng tập tin như thế không tồn tại thì chỉ có lỗi "File not found" - "Không tìm thấy tập tin" chứ không thể là "permission denied".

Một hoặc nhiều tập tin cần xóa có thuộc tính ReadOnly
-----------

Muốn kiểm tra thì phải chuột trên từng tập tin rồi chọn Properties thì sẽ thấy tập tin nào bị thế.
Tất nhiên nếu tôi đoán được ý thì trong thư mục không có những tập tin có tầm quan trọng sống còn của system. Vì những tập tin như thế system không cho phép xóa và cũng sẽ có "permission denied" hoặc "access denied". Cái khác là một tập tin vd. TXT bình thường nhưng nếu có thì ReadOnly thì code của bạn không xóa được nhưng xóa bằng tay được. Còn các tập tin quan trọng của system thì thậm chí không xóa được bằng tay vì luôn có "access denied"
 
Lần chỉnh sửa cuối:
Upvote 0
Sheet, cột chả liên quan gì. Thậm chí nếu lấy ở sheet, cột không chuẩn (lấy nhầm) và dữ liệu không ở dạng đường dẫn tập tin hay có dạng đường dẫn nhưng tập tin như thế không tồn tại thì chỉ có lỗi "File not found" - "Không tìm thấy tập tin" chứ không thể là "permission denied".

Một hoặc nhiều tập tin cần xóa có thuộc tính ReadOnly
-----------

Muốn kiểm tra thì phải chuột trên từng tập tin rồi chọn Properties thì sẽ thấy tập tin nào bị thế.
Tất nhiên nếu tôi đoán được ý thì trong thư mục không có những tập tin có tầm quan trọng sống còn của system. Vì những tập tin như thế system không cho phép xóa và cũng sẽ có "permission denied" hoặc "access denied". Cái khác là một tập tin vd. TXT bình thường nhưng nếu có thì ReadOnly thì code của bạn không xóa được nhưng xóa bằng tay được. Còn các tập tin quan trọng của system thì thậm chí không xóa được bằng tay vì luôn có "access denied"
Thư mục của mình k liên quan gì đến hệ thống cả, mình dùng để lọc các video trong thư mục và giữ lại một số file. Dữ liệu khoảng 3TB với gần 30k file. Có thể một số file như bạn nói là đạng read only. Mình có thể để on error resume next để qua những file lỗi rồi xóa tay sau không nhỉ?
 
Upvote 0
HTML:
Sub DeleteFile()
    If MsgBox("Ban muon xoa file?", vbQuestion + vbOKCancel) = vbCancel Then Exit Sub
    'Khai bao FSO
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    'Lay duong dan thu muc Goc va Move
    Dim PathS, PathE As String
    PathS = Cells(1, 4).Value & "\"
    
    'Kiem tra thu muc co ton tai khong?
    If Not FSO.folderExists(PathS) Then
        MsgBox "THU MUC GOC KHONG DUNG", vbExclamation
        Exit Sub
    End If
    
    
    'xac dinh dong dl
    Dim Row As Long
    Row = Range("B" & Rows.Count).End(xlUp).Row
    If Row < 3 Then
        MsgBox "KHONG CO TEN FILE", vbExclamation
        Exit Sub
    End If
    
    'Xoa file
    Dim FileName As String
    Dim i As Long
    
    
    
    
    On Error Resume Next
    For i = 3 To Row
        FileName = PathS & Cells(i, 2).Value
        If FSO.FileExists(FileName) Then
'            FSO.CopyFile Filename, PathE
            Err.Clear
            FSO.DeleteFile (FileName)
            If Err.Number <> 0 Then
                Cells(i, 3) = FileName
                MsgBox Err.Description & ". Kiem tra file: " & FileName
            Else
                Cells(i, 3) = "OK"
            End If
            
        Else
            Cells(i, 3) = "NG"
        End If
    Next i
    MsgBox "FINISH", vbInformation
End Sub

Chạy code trên, nếu nó báo lỗi thì dựa vào thông báo mà kiểm tra xem file có vấn đề gì koong?
 
Upvote 0
Thư mục của mình k liên quan gì đến hệ thống cả, mình dùng để lọc các video trong thư mục và giữ lại một số file.
Tôi đã viết rõ là có ReadOnly.
Còn system là phần viết thêm sau dòng ------------ để bạn có cách nhìn đầy đủ hơn mà thôi.
Mình có thể để on error resume next để qua những file lỗi rồi xóa tay sau không nhỉ?
Sao lại phải xóa tay? Nếu chỉ tính trường hợp ReadOnly thì thiết lập thuộc tính thành Normal thôi. Nếu đề phòng các lỗi khác thì bạn tự thêm phần xử lý lỗi.
Sửa
Mã:
For i = 3 To Row
    ...
Next i
hiện có thành
Mã:
For i = 3 To Row
    Filename = PathS & Cells(i, 2).Value
    If FSO.FileExists(Filename) Then
        FSO.GetFile(Filename).Attributes = 0
        FSO.DeleteFile (Filename)
        Cells(i, 3) = "OK"
    Else
        Cells(i, 3) = "NG"
    End If
Next i
 
Upvote 0
HTML:
Sub DeleteFile()
   ...
                MsgBox Err.Description & ". Kiem tra file: " & FileName
           
...
End Sub

Chạy code trên, nếu nó báo lỗi thì dựa vào thông báo mà kiểm tra xem file có vấn đề gì koong?
Nhập vào cột C thôi.
Mã:
Cells(i, 3) = "Cần kiểm tra"
Người ta có Dữ liệu khoảng 3TB với gần 30k file. Nếu số lỗi là vd. 100 thì đóng MsgBox mỏi tay :D
 
Upvote 0
Tôi đã viết rõ là có ReadOnly.
Còn system là phần viết thêm sau dòng ------------ để bạn có cách nhìn đầy đủ hơn mà thôi.

Sao lại phải xóa tay? Nếu chỉ tính trường hợp ReadOnly thì thiết lập thuộc tính thành Normal thôi. Nếu đề phòng các lỗi khác thì bạn tự thêm phần xử lý lỗi.
Sửa
Mã:
For i = 3 To Row
    ...
Next i
hiện có thành
Mã:
For i = 3 To Row
    Filename = PathS & Cells(i, 2).Value
    If FSO.FileExists(Filename) Then
        FSO.GetFile(Filename).Attributes = 0
        FSO.DeleteFile (Filename)
        Cells(i, 3) = "OK"
    Else
        Cells(i, 3) = "NG"
    End If
Next i
Cảm ơn bạn! Mình đã sửa và code chạy tốt.
mình có đọc bài FSO trong diễn đàn nhưng không có nói gì đến vấn đề thay đổi các thuộc tính file nên mới tính xóa tay ^^.
 
Upvote 0
Web KT

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

Back
Top Bottom