Nhờ khắc phục lỗi Run-time eror '52': Bad file name trong VBA

Liên hệ QC
Tham gia
23/12/15
Bài viết
351
Được thích
271
Giới tính
Nam
Chào cả nhà, mình đang viết code như bên dưới để duyệt qua các file .xls trong thư mục download được tạo ra từ sau thời điểm cho trước. Quá trình chạy thì bị lỗi "52" như hình. Lỗi này xảy ra khi file có tên bằng tiếng Việt. Mình đã lồng vào On error go to... nhưng không được, bẫy lỗi này bẫy được file có tên "Nhờ trợ giúp.xlsx", nhưng không hiểu sao không bẫy được file "Tổng.xlsm". Nhờ mọi người chỉ giùm mình cách khắc phục với.

1607928680646.png

1607928028981.png

Mã:
Sub RefreshData()
Dim str As String
Dim add As String
Dim filename As String
Dim time As Double
    str = "14/12/2020 12:00:00"
    Application.DisplayAlerts = False
    time = DateValue(str) + TimeValue(str)
    add = "C:\Users\user\Downloads\"
    filename = Dir(add & "*.xls")
    Do While Len(filename) > 0
        On Error GoTo aaa
        If FileDateTime(add & filename) >= time Then
            Workbooks.Open filename:=add & filename
            'Workbooks(filename).Sheets("Sheet1").Select
            'Code...
            Workbooks(filename).Close
        End If
aaa:
        filename = Dir
    Loop
    Application.DisplayAlerts = True
    MsgBox "Ok"
End Sub
 
Chào cả nhà, mình đang viết code như bên dưới để duyệt qua các file .xls trong thư mục download được tạo ra từ sau thời điểm cho trước. Quá trình chạy thì bị lỗi "52" như hình. Lỗi này xảy ra khi file có tên bằng tiếng Việt. Mình đã lồng vào On error go to... nhưng không được, bẫy lỗi này bẫy được file có tên "Nhờ trợ giúp.xlsx", nhưng không hiểu sao không bẫy được file "Tổng.xlsm". Nhờ mọi người chỉ giùm mình cách khắc phục với.

View attachment 251174

View attachment 251173

Mã:
Sub RefreshData()
Dim str As String
Dim add As String
Dim filename As String
Dim time As Double
    str = "14/12/2020 12:00:00"
    Application.DisplayAlerts = False
    time = DateValue(str) + TimeValue(str)
    add = "C:\Users\user\Downloads\"
    filename = Dir(add & "*.xls")
    Do While Len(filename) > 0
        On Error GoTo aaa
        If FileDateTime(add & filename) >= time Then
            Workbooks.Open filename:=add & filename
            'Workbooks(filename).Sheets("Sheet1").Select
            'Code...
            Workbooks(filename).Close
        End If
aaa:
        filename = Dir
    Loop
    Application.DisplayAlerts = True
    MsgBox "Ok"
End Sub
tìm hiểu về FileSystemObject thử xem, lúc đó dùng vòng lặp for each cho mỗi file trong folder nên không ảnh hưởng tới file name là tiếng việt
 
Upvote 0
Thử code này xem:
Mã:
Option Explicit

Sub RefreshData()
Dim str As String
Dim add As String
Dim filename As String
Dim time As Double
Dim Fso As Object, oFile As Object
    Set Fso = CreateObject("Scripting.FileSystemObject")
    str = "14/12/2020 12:00:00"
    Application.DisplayAlerts = False
    time = DateValue(str) + TimeValue(str)
    add = "C:\Users\user\Downloads"
    For Each oFile In Fso.GetFolder(add).Files
        If InStr(oFile.Name, "xls") > 0 And oFile.Name <> ActiveWorkbook.Name And Left(oFile.Name, 1) <> "~" Then
            If FileDateTime(oFile) >= time Then
                Workbooks.Open oFile
                'Code...
                ActiveWorkbook.Close False
            End If
        End If
    Next
    Application.DisplayAlerts = True
    MsgBox "Ok"
End Sub
 
Upvote 0
Thử code này xem:
Mã:
Option Explicit

Sub RefreshData()
Dim str As String
Dim add As String
Dim filename As String
Dim time As Double
Dim Fso As Object, oFile As Object
    Set Fso = CreateObject("Scripting.FileSystemObject")
    str = "14/12/2020 12:00:00"
    Application.DisplayAlerts = False
    time = DateValue(str) + TimeValue(str)
    add = "C:\Users\user\Downloads"
    For Each oFile In Fso.GetFolder(add).Files
        If InStr(oFile.Name, "xls") > 0 And oFile.Name <> ActiveWorkbook.Name And Left(oFile.Name, 1) <> "~" Then
            If FileDateTime(oFile) >= time Then
                Workbooks.Open oFile
                'Code...
                ActiveWorkbook.Close False
            End If
        End If
    Next
    Application.DisplayAlerts = True
    MsgBox "Ok"
End Sub
Không được rồi bạn ơi, code vẫn bị lỗi ở những file tên tiếng việt, cũng vẫn là lỗi '52' đó.
1607933335460.png
 
Upvote 0
Dir là lệnh của Dos, không dùng được với đường dẫn là ký tự có dấu. Chỉ dùng loại ABC-z thôi
Mình biết vậy nhưng vốn mình không làm việc với các file có tên tiếng Việt này, muốn sử dụng bẫy lỗi để bỏ qua mà cũng không được. :(
Bài đã được tự động gộp:

Ngon lành rồi, cám ơn bang chủ cái bang nhiều :D
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom