Xin code VBA tìm kiếm mã hàng, tên hàng

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

hamhochoi66

Thành viên chính thức
Tham gia
17/4/12
Bài viết
53
Được thích
-2
Giới tính
Nam
Em chào anh chị,
Trước tiên cho phép em đăng lại một lần nữa vì không biết bài trước có bị đăng nhầm không mà sao không có ai phản hồi hết.
Em có 1 file theo dõi mã hàng, em muốn tìm kiếm theo mã và theo tên hàng khi gõ vào textbox như hình bên dưới. Vấn đề của em là khi dữ liệu lớn, lúc gõ vào ô tìm kiếm theo tên thì nó hơi bị giật. Anh chị có code VBA nào để cải thiện tốc độ tìm kiếm giúp em ạ! Em cảm ơn các anh chị!

1701685079363.png
Truo
 

File đính kèm

  • Tao o tim kiem.xlsm
    487.4 KB · Đọc: 27
Em chào anh chị,
Trước tiên cho phép em đăng lại một lần nữa vì không biết bài trước có bị đăng nhầm không mà sao không có ai phản hồi hết.
Em có 1 file theo dõi mã hàng, em muốn tìm kiếm theo mã và theo tên hàng khi gõ vào textbox như hình bên dưới. Vấn đề của em là khi dữ liệu lớn, lúc gõ vào ô tìm kiếm theo tên thì nó hơi bị giật. Anh chị có code VBA nào để cải thiện tốc độ tìm kiếm giúp em ạ! Em cảm ơn các anh chị!

View attachment 297320
Truo
Tìm dòng lệnh trên, lấy dòng dưới để thay. Chạy thử xem có còn đúng yêu cầu hay không rồi tính
Mã:
"*" & [D2] & "*", Operator:=xlOr
[D2] & "*", Operator:=xlOr
Mã:
"*" & [F2] & "*", Operator:=xlOr
[F2] & "*", Operator:=xlOr
 
Tìm dòng lệnh trên, lấy dòng dưới để thay. Chạy thử xem có còn đúng yêu cầu hay không rồi tính
Mã:
"*" & [D2] & "*", Operator:=xlOr
[D2] & "*", Operator:=xlOr
Mã:
"*" & [F2] & "*", Operator:=xlOr
[F2] & "*", Operator:=xlOr
Vẫn chạy nhưng nếu bỏ "*" phía trước thì nó filter bị sót, chỉ lấy tên hàng bắt đầu bằng từ tìm kiếm ạ!
 
Cái Advance Filter áp dụng liên tục lấy gì mà không giật?
Hình dung gõ dấu trắng nó filter 1 cái, gõ "s" nó giật filter 1 cái, tới khi gõ xong chữ "sấu bao tử" thì đau hết cả mắt
Thường người ta dùng combobox để hiển thị danh sách trích lọc sẽ không bị giật, không như filter trực tiếp trên sheet
 
Vẫn chạy nhưng nếu bỏ "*" phía trước thì nó filter bị sót, chỉ lấy tên hàng bắt đầu bằng từ tìm kiếm ạ!
Vậy là bạn mong muốn tìm tất cả các dòng có chứa "từ" mà bạn nhập?
Cũng cần phân biệt là "từ" và "ký tự" là khác nhau nhé

Nếu là tìm dòng chứa "từ" thì có lẽ có thể cải thiện tốc độ được
 
Bạn sửa TextBox2_Change() về như bên dưới. Sự kiện lọc chỉ thực hiện khi có 1 dấu trắng được gõ cuối từ khóa
Mã:
Private Sub TextBox2_Change()

If Range("F2").Value <> "" Then
    If InStr(Len(Range("F2").Value), Range("F2").Value, " ") Then
        ActiveSheet.ListObjects("ERPdata").Range.AutoFilter Field:=4, Criteria1:= _
                "*" & Application.Trim(Range("F2")) & "*", Operator:=xlOr
    End If
End If
If Range("F2").Value = "" Then ActiveSheet.ListObjects("ERPdata").Range.AutoFilter

'    ActiveSheet.ListObjects("ERPdata").Range.AutoFilter Field:=4, Criteria1:= _
'        "*" & [F2] & "*", Operator:=xlOr
'If Range("F2").Value = "" Then ActiveSheet.ListObjects("ERPdata").Range.AutoFilter
End Sub
 
Bạn sửa TextBox2_Change() về như bên dưới. Sự kiện lọc chỉ thực hiện khi có 1 dấu trắng được gõ cuối từ khóa
Mã:
Private Sub TextBox2_Change()

If Range("F2").Value <> "" Then
    If InStr(Len(Range("F2").Value), Range("F2").Value, " ") Then
        ActiveSheet.ListObjects("ERPdata").Range.AutoFilter Field:=4, Criteria1:= _
                "*" & Application.Trim(Range("F2")) & "*", Operator:=xlOr
    End If
End If
If Range("F2").Value = "" Then ActiveSheet.ListObjects("ERPdata").Range.AutoFilter

'    ActiveSheet.ListObjects("ERPdata").Range.AutoFilter Field:=4, Criteria1:= _
'        "*" & [F2] & "*", Operator:=xlOr
'If Range("F2").Value = "" Then ActiveSheet.ListObjects("ERPdata").Range.AutoFilter
End Sub
Đỡ giật nhiều luôn ạ! Cám ơn anh!
 
Web KT
Back
Top Bottom