Lấy giá trị Textbox để tìm kiếm

Liên hệ QC

manhhung12

Thành viên thường trực
Tham gia
20/3/08
Bài viết
232
Được thích
88
các bạn cho tôi hỏi:
Tôi có 1 form trên đó có 1 textbox và 1 commandbutton. Tôi muốn:
Sau khi nhâp xong text vào textbox và nhấn enter thì dùng gtrị vừa nhập tìm kiếm trên sheet nếu đã có thì thông báo, nếu chưa thì thêm vào sheet.
Tôi loay hoay mãi kg biết dùng sự kiện nào và code như thế nào đẻ làm việc đó.
Các bạn giúp tôi với
Cảm ơn nhiều
 
các bạn cho tôi hỏi:
Tôi có 1 form trên đó có 1 textbox và 1 commandbutton. Tôi muốn:
Sau khi nhâp xong text vào textbox và nhấn enter thì dùng gtrị vừa nhập tìm kiếm trên sheet nếu đã có thì thông báo, nếu chưa thì thêm vào sheet.
Tôi loay hoay mãi kg biết dùng sự kiện nào và code như thế nào đẻ làm việc đó.
Các bạn giúp tôi với
Cảm ơn nhiều

Trong VBA dùng For...Next để tìm trên cột chứa dữ liệu, nếu tìm thấy thì thông báo, nếu không thấy thì dùng lệnh ghi lên Sheet
Bạn tham khảo thêm các bài viết trên 4R
Thân
 
Upvote 0
Cảm ơn bạn đã trả lời
Trong VBA dùng For...Next để tìm trên cột chứa dữ liệu, nếu tìm thấy thì thông báo, nếu không thấy thì dùng lệnh ghi lên Sheet
Bạn tham khảo thêm các bài viết trên 4R
Thân
Bạn có thể cho tôi biết dùng sự kiện nào đẻ dưa đoạn code for ...next vào kg? như tôi muốn là sau khi nhập text vào rồi nhấn enter thì ct mới đi tìm.
Cảm ơn bạn.
 
Upvote 0
Upvote 0
Ý tôi là nhập xong trong textbox và nhấn enter chứ không thoát khỏi form mà có thể chuyển con trỏ sang 1 textbox khác chứ chưa nhấn commandbutton
ví dụ ở file kèm theo khi nhập chứng minh thư 1 người thì nó tìm trên sheet đã có người đó chưa nếu có rồi thì thông báo nếu chưa có thì thêm vào ds
 

File đính kèm

Upvote 0
Ý tôi là nhập xong trong textbox và nhấn enter chứ không thoát khỏi form mà có thể chuyển con trỏ sang 1 textbox khác chứ chưa nhấn commandbutton
ví dụ ở file kèm theo khi nhập chứng minh thư 1 người thì nó tìm trên sheet đã có người đó chưa nếu có rồi thì thông báo nếu chưa có thì thêm vào ds

Code đơn giản thôi mà. Bạn xem file đính kèm. bạn làm tương tự nếu muốn kiểm tra số CMND.
 

File đính kèm

Upvote 0
Theo tôi không cần dùng For...Next làm gì cho phức tạp và chậm. Ta chỉ cần dùng hàm countif đếm giá trị trong vùng dữ liệu gán vào sự kiện AfterUpdate. Nếu nó bằng 0 thì cho nhập và chuyển con trỏ sang vùng mới, nếu lớn hơn không thì thông báo và reset lại textbox="". Theo tôi đưa số chứng minh nhập trước (Vì nó tương tự mã người không trùng số CMND) nếu bị trùng thì đỡ mất công nhập họ tên.
 
Lần chỉnh sửa cuối:
Upvote 0
Code đơn giản thôi mà. Bạn xem file đính kèm. bạn làm tương tự nếu muốn kiểm tra số CMND.

PHP:
Sub Check()
MyCheck = False
If UserForm1.TxtHovaTen1 = "" Or IsNull(UserForm1.TxtHovaTen1) Then
    a = MsgBox("Khong co du lieu de tim", , "Thong bao")
    Exit Sub
Else
    For I = 2 To Sheets("DSCD").Range("B65536").End(xlUp).Row
        If UCase(Sheets("DSCD").Cells(I, 2)) = UCase(UserForm1.TxtHovaTen1) Then
            a = MsgBox("Du lieu da co, vui long nhap ten khac", , "Thong bao")
            MyCheck = True
            Exit Sub
        Else
            MyCheck = False
        End If
    Next I
    
    If MyCheck = False Then
        Sheets("DSCD").Cells(Sheets("DSCD").Range("B65536").End(xlUp).Row + 1, 2) = UserForm1.TxtHovaTen1
        Sheets("DSCD").Cells(Sheets("DSCD").Range("B65536").End(xlUp).Row + 1, 3) = UserForm1.TxtCmt1
        MyCheck = True
    Else
        Exit Sub
    End If
End If
End Sub

Hãy làm cho gọn lại bạn ạ.
Việc kiểm tra dữ liệu đã có hay chưa như trên thì không nên dùng For . . Next.
Đơn giản là Countif, nếu muốn nhanh hơn thì nên dùng Match.

PHP:
Sub CheckOB()
    On Error Resume Next
    Dim CMND As String, HC As Long
    CMND = UserForm1.TxtCmt1
    If CMND = "" Then MsgBox "Khong co du lieu de tim", , "Thong bao": Exit Sub
    With Sheet2
        HC = .Range("C65000").End(xlUp).Row
        If WorksheetFunction.CountIf(.Range("C2:C") & HC, CMND) > 0 Then
            MsgBox "Du lieu da co, vui long nhap ten khac", , "Thong bao"
        Else
            .Range("A" & HC + 1).Value = HC
            .Range("B" & HC + 1).Value = UserForm1.TxtHovaTen1
            .Range("C" & HC + 1).Value = CMND
        End If
    End With
End Sub
Thân!
 
Upvote 0
Cảm ơn các bạn đã giúp đỡ.
-----
Theo tôi không cần dùng For...Next làm gì cho phức tạp và chậm. Ta chỉ cần dùng hàm countif đếm giá trị trong vùng dữ liệu gán vào sự kiện AfterUpdate. Nếu nó bằng 0 thì cho nhập và chuyển con trỏ sang vùng mới, nếu lớn hơn không thì thông báo và reset lại textbox="". Theo tôi đưa số chứng minh nhập trước (Vì nó tương tự mã người không trùng số CMND) nếu bị trùng thì đỡ mất công nhập họ tên.
Đúng là ý của tôi như vậy.
Tôi đã làm được đối với 1 textbox, và tôi sẽ làm như vậy đối với các textbox khác. Tuy nhiên với textbox: Txthovaten1 thì tôi muốn đây là label hiển thị tên khi nhập số cmt (TxtCmt1) nếu có trong danh sách thì hiển thị tên(cổ đông) chứ không nhập tên
kieu nhu thế này: lbHovaten1.Caption=sheets("DSCD").Range("C" & HC + 1).Value
không biết có được không?

Một lần nữa cảm ơn các bạn nhiều
 

File đính kèm

Upvote 0
Tôi có 1 form trên đó có 1 textbox và 1 cmd TIMKIEM. Tôi muốn:
Sau khi nhâp xong text vào textbox và nhấn cmd TIMKIEM thì dùng gtrị vừa nhập tìm kiếm trên sheet nếu đã có thì thông báo, nếu chưa thì thêm vào sheet.
mấy pác giúp cho tôi với. thank
 
Upvote 0
Web KT

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

Back
Top Bottom