Nhờ mọi người hỗ trợ giúp mình về tìm kiếm trong VBA. Mình sẽ gửi chút chi phí cafe cám ơn nhiều ạ

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

kentshjnks

Thành viên mới
Tham gia
4/5/24
Bài viết
4
Được thích
0
Mình đang tập tành viết code VBA. nhờ các cao nhân hỗ trợ giúp mình phần tìm kiếm trên userform. Mình cám ơn nhiều ạ
 

File đính kèm

  • Screenshot 2024-05-06 124514.png
    Screenshot 2024-05-06 124514.png
    178.3 KB · Đọc: 42
  • KHOA12345.xlsm
    42.8 KB · Đọc: 19
Tìm kiếm như thế nào bạn phải nói ra chứ.Ai biết cái bạn cần là cái gì mà viết code.
file của mình hiện tại ô tìm kiếm khi mình nhập tìm kiếm phải đánh hết kí tự mới ra kết quả. Mình muốn khi tìm kiếm mình chỉ cần đánh vài ký tự đầu sẽ gợi ý ra kết quả ạ
 
Mình đang tập tành viết code VBA. nhờ các cao nhân hỗ trợ giúp mình phần tìm kiếm trên userform. Mình cám ơn nhiều ạ
Bạn nên sửa lại từ cao nhân để nhận được nhiều sự hỗ trợ hơn.
Tôi không phải là "cao nhân", "thấp nhân" gì hết nhưng xem bài và sửa lại theo ý hiểu của bản thân:
1/ Dòng code sau của Private Sub cmdSearch_Click()
Mã:
If Sheet1.Cells(y, 2).Value = TextBox8.Text Then
sửa lại thành.
Mã:
If Sheet1.Cells(y, 1).Value = TextBox8.Text Then
2/ Sửa
Mã:
Private Sub listbox1_click()
    TextBox8.Text = ListBox1.Column(0)
End Sub
thành
Mã:
Private Sub listbox1_click()
    TextBox8.Text = ListBox1.Column(0)
    Call cmdSearch_Click
End Sub
Chạy thử, nếu đúng ý hồi âm, và donate cho diễn đàn
 
file của mình hiện tại ô tìm kiếm khi mình nhập tìm kiếm phải đánh hết kí tự mới ra kết quả. Mình muốn khi tìm kiếm mình chỉ cần đánh vài ký tự đầu sẽ gợi ý ra kết quả ạ
Xem cái này đúng ý bạn không nhé:
 
file của mình hiện tại ô tìm kiếm khi mình nhập tìm kiếm phải đánh hết kí tự mới ra kết quả. Mình muốn khi tìm kiếm mình chỉ cần đánh vài ký tự đầu sẽ gợi ý ra kết quả ạ
bạn thử tìm kiếm với Hàm Filter2DArray trong diễn đàn.
 
Bạn nên sửa lại từ cao nhân để nhận được nhiều sự hỗ trợ hơn.
Tôi không phải là "cao nhân", "thấp nhân" gì hết nhưng xem bài và sửa lại theo ý hiểu của bản thân:
1/ Dòng code sau của Private Sub cmdSearch_Click()
Mã:
If Sheet1.Cells(y, 2).Value = TextBox8.Text Then
sửa lại thành.
Mã:
If Sheet1.Cells(y, 1).Value = TextBox8.Text Then
2/ Sửa
Mã:
Private Sub listbox1_click()
    TextBox8.Text = ListBox1.Column(0)
End Sub
thành
Mã:
Private Sub listbox1_click()
    TextBox8.Text = ListBox1.Column(0)
    Call cmdSearch_Click
End Sub
Chạy thử, nếu đúng ý hồi âm, và donate cho diễn đàn
dạ mình vẫn chưa chạy dc bạn ơi
 
Sửa
If Sheet1.Cells(y, 2).Value = TextBox8.Text Then
thành
If Sheet1.Cells(y, 2).Value Like "*" & TextBox8.Text & "*" Then
Sau đó chỉ cần gõ vài ký tự và nhấn nút

1715005873237.png

Form còn nhiều bất cập lắm chẳng hạn Tab Index chạy loạn lên.

Hãy xem tài liệu chi tiết về User form
 
Lần chỉnh sửa cuối:
Người ta muốn chỉ gõ vài ký tự của cột user và muốn ra nguyên 1 form thông tin. Hiện tại phải gõ đủ thì nhấn tìm kiếm mới ra.

Cột User
Cảm ơn anh đã nhắc nhở.
Tôi đã nói là làm theo ý hiểu.
Ý của bạn chủ thớt ấy không nói rõ, mà không phải chỉ riêng tôi không hiểu mà cũng đã có thành viên khác không hiểu phải hỏi lại kia kìa.
dạ mình vẫn chưa chạy dc bạn ơi
Bạn mở form lên click vào 1 dòng nào đó trong listbox thử xem.
 
Ý của bạn chủ thớt ấy không nói rõ, mà không phải chỉ riêng tôi không hiểu mà cũng đã có thành viên khác không hiểu phải hỏi lại kia kìa.
Tôi cũng đọc như mọi người thôi. Bài 5 nói:
file của mình hiện tại ô tìm kiếm khi mình nhập tìm kiếm phải đánh hết kí tự mới ra kết quả. Mình muốn khi tìm kiếm mình chỉ cần đánh vài ký tự đầu sẽ gợi ý ra kết quả ạ
ô tìm kiếm là Textbox8
đánh hết ký tự thì không phải số thứ tự, tức là không phải cột 1. Đọc code thì thấy Sheet1.Cells(y, 2).Value tức là cột 2.

Tôi thử gõ đủ cái gì đó trong cột 2 rồi nhấn nút tìm kiếm thì đúng là tìm cột 2.

Thôi rồi một đĩa chả thơm cho diễn đàn
Thì cứ donate cho diễn đàn.
 
Bạn muốn tìm kiếm cột nào?
Bạn chưa chịu đọc Code của tác giả rồi!


Đôi lời nhắn nhủ đến tác giả bài đăng:
→ Nếu thật sự bạn là người mới bắt đầu viết Code thì ta nên viết theo khuôn phép vầy:
PHP:
Private Sub cmdSearch_Click() 'Tim Kiêm '
Dim x As Long
Dim y As Long
x = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
For y = 6 To x
    If Sheet1.Cells(y, 2).Value = tbTim.Text Then
        TextBox1 = Sheet1.Cells(y, 1).Value
        TextBox2 = Sheet1.Cells(y, 2).Value
        ComboBox1 = Sheet1.Cells(y, 5).Value
        TextBox3 = Sheet1.Cells(y, 3).Value
        TextBox4 = Sheet1.Cells(y, 4).Value
        TextBox5 = Sheet1.Cells(y, 6).Value
        TextBox6 = Sheet1.Cells(y, 7).Value
        TextBox7 = Sheet1.Cells(y, 8).Value
        TextBox9 = Sheet1.Cells(y, 9).Value
        TextBox11 = Sheet1.Cells(y, 10).Value
        TextBox12 = Sheet1.Cells(y, 11).Value
        TextBox13 = Sheet1.Cells(y, 12).Value
    End If
 Next y
End Sub

(Nghĩa là dóng theo cột cho thẳng; Có vậy ta đỡ thời gian tìm kiếm lỗi ngữ pháp ngớ ngẩn khi viết (như có For mà thiết Next;
Có If mà thiếu End If,. . . . .

Thứ nữa: Các tham biến nên gắn tên gợi nhớ (không như bạn những x hay y vô trí giác như vậy)
Nếu là mình thì 'X' của bạn sẽ trở thành 'Rws, hay lRow, hay DCuoi, hoặc thậm chí DongC,. . . .
Tốn thời gian 1 lần viết, nhưng sẽ không tốn thời gian cho những lần đọc Code sau này trong suốt cuộc đời làm việc với Code của bạn!

'y' là tham biến xài trong vòng lặp, & người đời hay xài 'J' (cho bàn fím mòn đều khi xài tiếng Việt đó bạn!)

Nếu bạn cho rằng những góp ý của mình là nhỏ nhặt thì có thể bỏ qua, nha!
 
...

Thứ nữa: Các tham biến nên gắn tên gợi nhớ (không như bạn những x hay y vô trí giác như vậy)
Nếu là mình thì 'X' của bạn sẽ trở thành 'Rws, hay lRow, hay DCuoi, hoặc thậm chí DongC,. . . .
Tốn thời gian 1 lần viết, nhưng sẽ không tốn thời gian cho những lần đọc Code sau này trong suốt cuộc đời làm việc với Code của bạn!

'y' là tham biến xài trong vòng lặp, & người đời hay xài 'J' (cho bàn fím mòn đều khi xài tiếng Việt đó bạn!)
....
Theo ngữ pháp xưa (truyền từ FORTRAN, con đẻ của IBM) thì các biến bắt đầu bởi i~m là integer, các ký tự khác là single (để chuyển qua double, IBM buộc phải có dòng chỉ dẫn compler "Double Precision"), chuỗi thì có $ theo cuối.

Vì vậy, các lập trình viên sau này có khuynh hướng dùng i cho vòng lặp ngang, j cho dọc.
Gặp i, j... m, người quen đọc code tự động hiểu ngay chúng là biến integer/long.

Chú thích: vì GPE không theo truyền thống này cho nên tôi đọc code của các anh chị GPE.

Chứ thích 2: phần code ở đây là lọc từ bảng này sang bảng nọ, và k/K được coi như là biến đếm cho mảng đầu ra. Lưu ý rằng đây là truyền thống của GPE, không nhất thiết là của lập trình viên các môi trường khác.
 
Web KT
Back
Top Bottom