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

Liên hệ QC

Lien-nguyen

Thành viên mới
Tham gia
30/7/14
Bài viết
15
Được thích
4
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

  • Thử-Tim.xlsm
    96.4 KB · Đọc: 9
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!
 
Xin bạn xem file
 

File đính kèm

  • GPE.rar
    80.4 KB · Đọc: 35
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 ạ!
 
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.
 
Web KT
Back
Top Bottom