làm thế nào để chuyển đến hàng tương ứng khi kick chọn vào listbox (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

thaibao13d3bk

Thành viên mới
Tham gia
4/10/19
Bài viết
10
Được thích
2
Các bác cho em hỏi có cách nào tìm đến hàng excel tương ứng khi ta tích chọn vào listbox không ạ. Ví dụ em có file như sau, khi em search là 624 thì khi bấm chọn vào list bõ thì hấn sẽ chuyển đến dòng 630 này luôn với được không ạ. Em gửi theo file. Cảm ơn nhiều ạ1571731308312.png
 

File đính kèm

PHP:
Dim lbID As Integer     '*   '
Private Sub txtlist_Change()
 Dim Id, i
 Dim SoHD As String '*  '
 Dim Rng As Range, sRng As Range
    
    Id = txtlist.ListIndex
 lbID = Me!txtlist.ListIndex    '*  '
 SoHD = Me!txtlist.List(lbID, 0)        '*  '
 With Sheet1
    Set Rng = .Range(.[B1], .[B65500].End(xlUp))
    Set sRng = Rng.Find(SoHD, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        MsgBox sRng.Row
    End If
 End With
 'Các Lệnh Của bạn:'
    ' . . . . . .      ' 
End Sub
 
Upvote 0
Bạn dùng phương thức FIND giá trị Textbox , vùng tìm kiếm là cột tương ứng.
Range("A2:A630").Find(Textbox1.text).Row
Nó sẽ ra dòng chứa giá trị đó nhé.
 
Upvote 0
Bạn dùng phương thức FIND giá trị Textbox , vùng tìm kiếm là cột tương ứng.
Vì nó là 1 ListBox nên phải thêm công đoạn xác định dòng (đã chọn) trong ListBox
 
Upvote 0
PHP:
Dim lbID As Integer     '*   '
Private Sub txtlist_Change()
Dim Id, i
Dim SoHD As String '*  '
Dim Rng As Range, sRng As Range
   
    Id = txtlist.ListIndex
lbID = Me!txtlist.ListIndex    '*  '
SoHD = Me!txtlist.List(lbID, 0)        '*  '
With Sheet1
    Set Rng = .Range(.[B1], .[B65500].End(xlUp))
    Set sRng = Rng.Find(SoHD, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        MsgBox sRng.Row
    End If
End With
'Các Lệnh Của bạn:'
    ' . . . . . .      '
End Sub

ban ơi, cho mình hỏi giờ mình muốn lấy cái hàng đó để làm một số việc thì mình lấy biến nào để dùng vậy ạ? mình k giỏi vba cho lắm. cảm ơn bạn nhiều
 
Upvote 0
Tôi chỉ xét vấn đề chỉ số dòng thôi vì code của bạn có lỗi rất nhiều chỗ, tôi không có hứng để liệt kê hết. Điển hình là hình ảnh bạn gửi. Rõ rằng kết quả tìm kiếm không thể có 01/HĐ-NT được vì nó không chứa từ tìm kiếm là 624. Nguyên nhân là do gọi
Arr = FilterMCLArray(sArray, 2, txtsearch.Text, True)
Dòng đầu tiên trong mảng sArray là dòng 2 trên sheet. Dòng 2 đâu có là tiêu đề mà True?

Về vấn đề chỉ số dòng trên sheet của mục được chọn trong txtlist thì:
1. Trong UserForm_Initialize
sau dòng
Mã:
    sArray = Sheet1.Range("B2:C" & Sheet1.Range("B10000").End(xlUp).Row).Value
thì thêm cụm
Mã:
ReDim Preserve sArray(1 To UBound(sArray), 1 To UBound(sArray, 2) + 1)
lastcol = UBound(sArray, 2)
For K = 1 To UBound(sArray)
    sArray(K, lastcol) = K + 1
Next K

2.
Mã:
Private Sub txtlist_Change()
Dim id As Long, i As Long
    id = txtlist.ListIndex
    If id = -1 Then Exit Sub
    dong = txtlist.List(id, UBound(txtlist.List, 2))
    MsgBox "Chi so dong tren sheet cua muc duoc chon = " & dong
  
'    Làm những việc cần làm
End Sub
Bài đã được tự động gộp:

PHP:
Dim lbID As Integer     '*   '
Private Sub txtlist_Change()
Dim Id, i
Dim SoHD As String '*  '
Dim Rng As Range, sRng As Range
 
    Id = txtlist.ListIndex
lbID = Me!txtlist.ListIndex    '*  '
SoHD = Me!txtlist.List(lbID, 0)        '*  '
With Sheet1
    Set Rng = .Range(.[B1], .[B65500].End(xlUp))
    Set sRng = Rng.Find(SoHD, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        MsgBox sRng.Row
    End If
End With
'Các Lệnh Của bạn:'
    ' . . . . . .      '
End Sub
Code không chuẩn. Bạn tìm trong cột B trong khi đó với combobox = ALL như trong hình thì người ta tìm cả trong cột B và cột C.

Mà đã có id rồi thì sao lại phải dùng lbID? :D
 
Lần chỉnh sửa cuối:
Upvote 0
(1) . . . . Bạn tìm trong cột B trong khi đó với combobox = ALL như trong hình thì người ta tìm cả trong cột B và cột C.
(2) Mà đã có id rồi thì sao lại phải dùng lbID?
(1) Mình lại không quan tâm đến chuyện tìm kiếm của chủ bài đăng; Dù tìm bằng cột nào thì trên ListBox khi bấm chọn 1 dòng thì Số HĐ sẽ là mã để tìm trong trang CSDL
Với cột dữ liệu này, ta có khoảng 122 số HĐ duy nhất; Nhưng với cột phải liền kề ta có khoảng 392 dòng duy nhất
Vậy nên mình chọn tìm ở cột đầu tiên trong ListBox (Vì mình cho như vậy là khá hơn)

(2) Rõ ràng khai báo tham biến dùng chung để còn tiếp tục xài trong vài trường hợp khác nữa mà;
Bài #5 nè:
ban ơi, cho mình hỏi giờ mình muốn lấy cái hàng đó để làm một số việc thì mình lấy biến nào để dùng vậy ạ? mình k giỏi vba cho lắm.
@: thaibao13d3bk, post: 941301, member: 1229448 Chừng nào bạn chưa đóng Form thì tham biến lbID sẽ dẫn bạn đến dòng dữ liệu bạn đang chọn trong ListBox; Để lưu trị này bạn có thể khai báo 1 tham biến dùng chung nữa (như lbID) để chứa nó.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu cần phải tìm dòng tương ứng thì từ đầu, lúc thiết lập Listbox, người ta đã tìm cách giữ cái sự liên hệ giữa mỗi dòng và vị trí dòng.
Ví dụ nếu lấy từ RowSource thì nó có cái Index. Nếu nhét dữ liệu thì cộng thêm vị trí dòng vào sau cuối.
 
Upvote 1
Web KT

Bài viết mới nhất

Back
Top Bottom