Sửa lỗi VBA Compile Error "Named argument not found"

Liên hệ QC

Kiwi3007

Thành viên mới
Tham gia
29/9/21
Bài viết
1
Được thích
0
Chào mọi người, em vừa tự học VBA nên có thực hành làm một bài để lọc dữ liệu từ bảng. Khi chạy thì báo lỗi VBA Compile Error "Named argument not found". Mong mọi người chỉnh giúp em, em cảm ơn nhiều.
Mã:
Sub Filter()
    Dim ws As Worksheet
    Dim one_supplier As Variant
    Dim supplier As Variant
    
    With ThisWorkbook.Sheets("Filter")
        If .Range("A" & Rows.Count).End(3).Row > 2 Then
            supplier = .Range("B2:B" & .Range("A" & Rows.Count).End(3).Row)
        ElseIf .Range("A" & Rows.Count).End(3).Row = 2 Then
            supplier = Array(.[B2].Value)
        Else
            Exit Sub
        End If
    End With
    
    Set ws = ThisWorkbook.Sheets("data")
    For Each one_supplier In supplier
        Sheets.Add.Name = "BangGia_" & one_supplier
        
        With ws
            .AutoFilterMode = False
            .Range("A:G").AutoFilter
            .Range("A:G").AutoFilter field:=1, criteria:=one_supplier
            With .AutoFilter.Range
                .Offset(0).Resize(.Row.Count, 4).SpecialCells(xlCellTypeVisible).Copy
            End With
            .AutoFilterMode = False
        End With
        
        With ThisWorkbook.Sheets("Report_" & one_supplier)
            .[A1].PasteSpecial x1pastevalues
            .Columns("A:G").EntireColumn.AutoFit
        End With
    Next
   Set ws = Nothing
End Sub
 

File đính kèm

  • VBA_ Example.xlsm
    27.8 KB · Đọc: 1
Mình chép code ở đâu dzậy?

Nhìn kỹ xem họ viết ký tự gì thì mình chép đúng là được.

1635325439896.png
 
Upvote 0
Tốc độ tìm chỗ sai cực nhanh
Quen rồi thì thấy chỗ ấy khá hiển nhiên.
Lý thuyết: VBA theo chính sách đặt tên biến/hằng theo hệ thống lạc đà. Có nghĩa là khi một tên do ghép nhiều từ thì trừ từ đầu ra, các từ sau sẽ viết hoa. (nếu bạn để ý sẽ thấy tôi viết code cũng dùng quy luật ấy)
x1pastevalues rõ ràng là gồm nhiều từ, và chả có từ nào viết hoa -> không phải là hằng của VBA.
(nếu thượng câu Option Explicit thì nó chỉ ra ngay)

Chỉ là sao không thấy báo lỗi "Error 424" Object required thì tôi không biết.
 
Upvote 0
Upvote 0
Quen rồi thì thấy chỗ ấy khá hiển nhiên.
Lý thuyết: VBA theo chính sách đặt tên biến/hằng theo hệ thống lạc đà. Có nghĩa là khi một tên do ghép nhiều từ thì trừ từ đầu ra, các từ sau sẽ viết hoa. (nếu bạn để ý sẽ thấy tôi viết code cũng dùng quy luật ấy)
x1pastevalues rõ ràng là gồm nhiều từ, và chả có từ nào viết hoa -> không phải là hằng của VBA.
(nếu thượng câu Option Explicit thì nó chỉ ra ngay)

Chỉ là sao không thấy báo lỗi "Error 424" Object required thì tôi không biết.
Thông thường người ta chép dán code vào file chứ đâu có tự nhiên sửa lại code vì đâu có rành. Chỗ đó sao lại sai, tôi không suy luận ra được?
 
Upvote 0
công nhận vụ 1 và l khốn nạn thật, không để ý là nhầm ngay
 
Upvote 0
Upvote 0
criteria thiếu số 1 nữa. (Criteria1)

Nhìn trên cửa sổ VBA thì không thấy đâu, 1 và l giống nhau 99%. Copy ra paste vào GPE thì không để ý nữa.

Vì VBE mặc định phông Courier New. Phông này thực ra không hẳn dễ nhìn trên màn hình. Nếu đổi sang phông Verdana thì sẽ thấy rõ:
1635356943318.png

Courier là phông thời thượng, dùng cho máy đánh chữ cho nên có nhiều ký tự giống nhau.
Verdana là phông mới cho nên l hoàn toàn khác 1.

Thông thường người ta chép dán code vào file chứ đâu có tự nhiên sửa lại code vì đâu có rành. Chỗ đó sao lại sai, tôi không suy luận ra được?

Row là thuộc tính đơn giản (trị Long/integer).
Rows (tức là Range) là thuôc tính dạng phức tạp. Chỉ các dạng container (như Range, Collection,...) mới gọi được thuộc tính Count.
Gọi Row.Count thì VBA sẽ nhảy cẫng lên "Object Required"
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom