Sử dung UserForm textbox để tìm kiếm data.

Lien-nguyen

Thành viên mới
Tham gia ngày
30 Tháng bảy 2014
Bài viết
12
Được thích
4
Điểm
365
Dear Anh Chị!
Nhờ các Bác giúp em với ạ! Em có form được nhận từ supplier, mỗi lần tìm part number rất khổ nên có viết đoạn code find , nhưng có một số vấn đề em không giải quyết được nhờ các Bác giúp đỡ ạ:
1 . Ký tự tìm bị giới hạn 1 điều kiện ( chỉ tìm được đúng bằng số ký tự mình set, trong file em để = 10 or 12 ký tự nhưng kết quả chỉ trả cho phần đúng 10 ký tự nếu coppy 12 ký tự thì ko tìm được).
2. Chỉ find đc 1 lần mặc dù có một số part number có đến >2 lần xuất hiện ( Em muốn khi mình coppy Part Number mình enter nó sẽ nhẩy đến những ô có giá trị tương tự.)
Các Bác xem File đính kèm và giúp em với ạ.
Em cảm ơn ạ!
 

File đính kèm

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
11,844
Được thích
17,762
Điểm
1,860
Nhờ các Bác giúp! Em có form được nhận từ supplier, mỗi lần tìm part number rất khổ nên có viết đoạn code find , nhưng có một số vấn đề em không giải quyết được nhờ các Bác giúp đỡ ạ:
1 . Ký tự tìm bị giới hạn 1 điều kiện ( chỉ tìm được đúng bằng số ký tự mình set, trong file em để = 10 or 12 ký tự nhưng kết quả chỉ trả cho phần đúng 10 ký tự nếu coppy 12 ký tự thì ko tìm được).
2. Chỉ find đc 1 lần mặc dù có một số part number có đến >2 lần xuất hiện ( Em muốn khi mình coppy Part Number mình enter nó sẽ nhẩy đến những ô có giá trị tương tự.)
Các Bác xem File đính kèm và giúp em với ạ.
Em cảm ơn ạ!
a./ Điều đầu tiên là bạn xác định vùng tìm quá rộng lớn,, tới hàng triệu dòng
(từ câu lệnh Set Rng = Range([A1], [Y1].End(xlDown)) mà mình hiểu như vậy)
Nhưng theo file thì bạn chỉ chủ yếu cần tìm kiếm trên cột 'A' mà thôi & số dòng cũng chỉ bằng số dòng có dữ liệu cuối cùng của cột 'A' này cộng thêm 9
Tại sao cộng thêm 9: Vì trong cột 'A' của bạn có nhiều ô trộn theo cột.
Theo mình bạn nên xác định lại vùng tìm kiếm Rng
b./ Muốn tìm tất cả những số liệu có nhiều lần xuất hiện ta áp dụng thêm phương thức FindNext như mình ví dụ dưới đây:
PHP:
Private Sub tbTM_Change()
 Dim Rng As Range, sRng As Range
 Dim Rws As Long, W As Integer, Dem As Integer
 Dim MyAdd As String   '* *    '
 
 If Len(Me!tbTM.Text) <> 3 Then Exit Sub
 With Sheets("CSDL")
    Rws = .[b2].CurrentRegion.Rows.Count
    Set Rng = .[B1].Resize(Rws)
 End With
 ReDim Arr(1 To 35, 1 To 7)
 Set sRng = Rng.Find(Me!tbTM.Text, , xlFormulas, xlPart)  '* *     * *    * *    '
 If sRng Is Nothing Then
    MsgBox "Nothing!"
 Else
    MyAdd = sRng.Address
    Do
        W = W + 1:                  Arr(W, 1) = W
        For Dem = 2 To 7
            Arr(W, Dem) = sRng.Offset(, Dem - 2).Value
        Next Dem
        Set sRng = Rng.FindNext(sRng)   '* *     * *    '
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If
 If W Then
    Me!lbDS.List = Arr()
 End If
End Sub
c./ Muốn tìm những chuỗi có độ dài khác nhau, ta tiến hành tìm theo tham số xlPart

Rất vui khi được tiếp tục trao đổi cùng bạn!
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
11,844
Được thích
17,762
Điểm
1,860
Xin bạn xem file
 

File đính kèm

Lien-nguyen

Thành viên mới
Tham gia ngày
30 Tháng bảy 2014
Bài viết
12
Được thích
4
Điểm
365
Bác ui, bác có cách nào mà mình enter nó sẽ nhảy đến số trùng tiếp theo ko bác, vì em cần lấy thông tin cả dòng đó ạ? của bác em đang thấy liệt kê số lần xuất hiện ạ!
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
11,844
Được thích
17,762
Điểm
1,860
Nó đang liệt kê lên ListBox; Bạn chọn dòng nào đó trên ListBox thì ta sẽ lấy được mã của dòng đó (có thể cho hiện lên TextBox khi chọn 1 dòng nào đó trên ListBox.
 
Top Bottom