Lỗi không bắt mã 1004 với On Error ..

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

master90x

Thành viên mới
Tham gia
7/1/13
Bài viết
17
Được thích
0
Giới tính
Nam
Nghề nghiệp
Bách Nghệ
Dear All,
Hiện tại e đang có code này để cóp nhặt thông tin từ các file rồi tổng hợp lại vào 1 sheet. Tuy nhiên vấn đề là khi duyệt các file có tên tiếng việt thì VBA báo lỗi 1004 ko duyệt đc file. E đã dùng On Error GoTo rồi Resume Next để thử nhưng vẫn ko được. VBA vẫn hiển thị lỗi mà không bỏ qua. Các bác giúp e vs.
Thanks các bác

1682050229281.png

Mã:
Sub copy_costsheet()

Dim n, m, chi_so, lr, chiso_lechcot, chiso_saiten As Long
Dim expected_price As Variant
Dim path, customer_name, customer_code, part_no As String
path = Sheets("Main").Cells(5, "A").Value
Filename = Dir(path & "*.xls*")
Dim ws As Worksheet
m = 0
n = 1
chiso_lechcot = 2
chiso_saiten = 2
Do While Filename <> ""
    On Error Resume Next
    Workbooks.Open Filename:=path & Filename, ReadOnly:=True, UpdateLinks:=0
    Sheets("Cost sheet").Select
    customer_code = Sheets("Cost sheet").Cells(3, "D").Value
    part_no = Sheets("Cost sheet").Cells(4, "D").Value
    customer_name = Sheets("Cost sheet").Cells(6, "D").Value
    Application.Workbooks("CopyCostSheet-v2.xlsm").Activate
    Sheets("Data").Select

''  Copy Ten Ma Hang CostSheet
    Sheets("Data").Activate
    n = n + m + 1
    Application.Workbooks("CopyCostSheet-v2.xlsm").Activate
    Sheets("Data").Cells(n, "A").Value = "Customer Code: "
    Sheets("Data").Cells(n + 1, "A").Value = "Part No: "
    Sheets("Data").Cells(n + 2, "A").Value = "Customer Name: "
    Sheets("Data").Cells(n + 3, "A").Value = "Selling Price: "
   
    Sheets("Data").Cells(n, "B").Value = customer_code
    Sheets("Data").Cells(n + 1, "B").Value = part_no
    Sheets("Data").Cells(n + 2, "B").Value = customer_name
       
''  Copy CostSheet
    chi_so = 0
   
    Application.Workbooks(Filename).Activate
    Application.Workbooks("CopyCostSheet-v2.xlsm").Sheets("Data").Cells(n + 4, "A").Value = Filename
    For m = 10 To 250
        If Sheets("Cost sheet").Cells(m, "D").Value = "Total raw material cost" Then
            chi_so = m
        End If
        If Sheets("Cost sheet").Cells(m, "D").Value = "Expected price" Or Sheets("Cost sheet").Cells(m, "D").Value = "Selling price" Or Sheets("Cost sheet").Cells(m, "D").Value = "Selling Price" Or Sheets("Cost sheet").Cells(m, "D").Value = "selling price" Or Sheets("Cost sheet").Cells(m, "D").Value = "selling Price" Then
           expected_price = Sheets(2).Cells(m, "I").Value
        End If
    Next m
    Sheets("Cost sheet").Activate
   
    If chi_so = 0 Then
       Application.Workbooks("CopyCostSheet-v2.xlsm").Activate
       Sheets("Sheet_Loi").Cells(chiso_lechcot, "A").Value = Filename
       chiso_lechcot = chiso_lechcot + 1
       Workbooks(Filename).Close Savechanges:=False
       Filename = Dir()
    Else
        Range(Cells(10, "A"), Cells(chi_so, "I")).Select
        Selection.Copy
        Application.Workbooks("CopyCostSheet-v2.xlsm").Activate
        Sheets("Data").Cells(n, "D").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Data").Cells(n + 3, "B").Value = expected_price
        m = chi_so + 2 - 10
        Application.DisplayAlerts = False
        Workbooks(Filename).Close Savechanges:=False
        Filename = Dir()
    End If
       
        GoTo ketthuc
   
skip1:
    '' Dien Thong Tin Sheet Bi Sai Ten
    Application.Workbooks("CopyCostSheet-v2.xlsm").Activate
    Sheets("Sheet_Loi").Cells(chiso_saiten, "B").Value = Filename
    chiso_saiten = chiso_saiten + 1
   
ketthuc:
Loop

End Sub
 
Lần chỉnh sửa cuối:
Dùng Dir thì nhanh hơn fso nhưng nhược điểm thì như trường hợp của thớt. Với tôi thì không bao giờ đặt tên có dấu tiếng Việt, thậm chí gần như không dùng dấu cách. Tôi nghĩ đó là thói quen tốt.
 
Upvote 0
Dùng Dir thì nhanh hơn fso nhưng nhược điểm thì như trường hợp của thớt. Với tôi thì không bao giờ đặt tên có dấu tiếng Việt, thậm chí gần như không dùng dấu cách. Tôi nghĩ đó là thói quen tốt.
Dính đến code mới biết tác hại của việc để tên file/folder là tiếng việt có dấu (hoặc tiếng Nhật, Trung…).
Từ lâu em cũng đã bỏ dấu trong việc đặt tên file/folder, nhưng thay vì không để dấu cách thì em dùng “_” cách ra cho dễ đọc.
 
Upvote 0
Dính đến code mới biết tác hại của việc để tên file/folder là tiếng việt có dấu (hoặc tiếng Nhật, Trung…).
Từ lâu em cũng đã bỏ dấu trong việc đặt tên file/folder, nhưng thay vì không để dấu cách thì em dùng “_” cách ra cho dễ đọc.
Tôi cũng ít khi dùng ký tự gạch thấp trừ những trường hợp đặc biệt vì nó sẽ làm tên dài ra. Cứ viết hoa chữ cái đầu trong từng chữ NhuTheNay là dễ dàng đọc và hiểu rồi.
 
Upvote 0
Tôi cũng ít khi dùng ký tự gạch thấp trừ những trường hợp đặc biệt vì nó sẽ làm tên dài ra. Cứ viết hoa chữ cái đầu trong từng chữ NhuTheNay là dễ dàng đọc và hiểu rồi.
Ký tự gạch chân là cách được chấp nhận nhiều nhất trong các phương pháp đặt tên.
Tuy nhiên cũng có một số người nhìn ký tự này không được (trong số đó có tôi), hoặc do bẩm tính, hoặc do bẩm sinh (mắt khó nhận lằn ngang). Nhất là cái khuynh hướng đặt tên biến private nội bắt đầu với 2 dấu gạch.
Những ngwowifn này sẽ theo phương pháp khác, xưa hơn một chút nhưng không đến mổi lỗi thời. Đó là phương pháp viết hoa từng từ (như bạn nêu trên). Tên của phương pháp này là camel style. Camel=lạc đà; ý nói nổi lên ở giữa như bướu lạc đà.
 
Upvote 0
Ký tự gạch chân là cách được chấp nhận nhiều nhất trong các phương pháp đặt tên.
Tuy nhiên cũng có một số người nhìn ký tự này không được (trong số đó có tôi), hoặc do bẩm tính, hoặc do bẩm sinh (mắt khó nhận lằn ngang). Nhất là cái khuynh hướng đặt tên biến private nội bắt đầu với 2 dấu gạch.
Những ngwowifn này sẽ theo phương pháp khác, xưa hơn một chút nhưng không đến mổi lỗi thời. Đó là phương pháp viết hoa từng từ (như bạn nêu trên). Tên của phương pháp này là camel style. Camel=lạc đà; ý nói nổi lên ở giữa như bướu lạc đà.
Chắc cũng lỗi thời rồi đấy bác, cái thời mà tên không được có khoảng trắng, không dấu và chỉ được phép có bao nhiêu ký tự mà tôi quên mất rồi. Đấy chỉ là thói quen được giữ lại từ thời xa xưa, và như tôi đã nói đó là 1 thói quen tốt.
 
Upvote 1
Thanks các bác. Sau 1 hồi mày mò thì e cũng tìm ra đc solution tạm thời là viết thêm 1 cái function check tên file lỗi rồi ghi ra 1 cột ở sheet khác. Vấn đề tên file với anh em làm vba hay IT nói chung thì ai cũng có thói quen đấy cả nhưng đây là mình đang tổng hợp dữ liệu từ user. Mà các bác biết là user thì nó đâu có được như ae mình. Cứ hàng tháng nó tống độ 3000 file tổng hợp mà ko chạy Dir thì cả tiếng k xong. Vs lại file tên tiếng việt chỉ bị vài file mới khắm lọ. Lỗi cái chạy lại từ đầu thì mệt. Thôi cứ thằng nào lỗi ta bốc sang 1 cột để xử lý bằng tay. Tại nó cũng k nhiều chỉ 5-7 file thôi.
 
Upvote 0
Lại gặp Tây con.
Hằng tháng xử lý vài ngàn files mà trình độ hiểu biết Folder/Files cỡ này thì công ty chọn nhầm người làm việc rồi.
 
Upvote 0
Lại gặp Tây con.
Hằng tháng xử lý vài ngàn files mà trình độ hiểu biết Folder/Files cỡ này thì công ty chọn nhầm người làm việc rồi.
Vâng bác. Em bình thường là dân đá ngang thôi ah. Không biết thì phải hỏi để nâng cấp kinh nghiệm. Chắc lương bác độ mấy chục. Cỡ bác vào điễn đàn chắc anh em được học hỏi mở mang TẦM MẮT nhiều lắm. Cảm ơn bác
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom