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

Blue Softs epl 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: 0

befaint

|||||||||||||
Tham gia
6/1/11
Bài viết
12,608
Được thích
15,789
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

VetMini

Chuyên gia GPE
Tham gia
21/12/12
Bài viết
12,564
Được thích
16,261
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

ptm0412

Bad Excel Member
Thành viên BQT
Super Moderator
Tham gia
4/11/07
Bài viết
11,685
Được thích
32,762
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Consultant
Upvote 0

Maika8008

Thành viên gắn bó
Tham gia
12/6/20
Bài viết
2,685
Được thích
2,972
Donate (Momo)
Donate
Giới tính
Nam
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

khitamdao

Thành viên chính thức
Tham gia
30/3/17
Bài viết
66
Được thích
13
công nhận vụ 1 và l khốn nạn thật, không để ý là nhầm ngay
 
Upvote 0

befaint

|||||||||||||
Tham gia
6/1/11
Bài viết
12,608
Được thích
15,789
Upvote 0

VetMini

Chuyên gia GPE
Tham gia
21/12/12
Bài viết
12,564
Được thích
16,261
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
Top Bottom