Tìm kiếm nhiều lần kết hợp Textbox và Listbox

Liên hệ QC

letienmai

Thành viên hoạt động
Tham gia
16/7/14
Bài viết
146
Được thích
45
Kính gửi: các anh/chị
Không biết chủ đề này có ai thảo luận chưa nên xin phép Admin cho mình được đăng đàn nhờ giúp đỡ, cụ thể
- Mình muốn tìm kiếm trên danh sách họ tên trên Listbox từ Textbox (Hiện tại phần này mình đã làm được xin gửi file đính kèm)
- Tuy nhiên hiện tại mình chỉ nghĩ ra được code mỗi lần tìm kiếm chỉ được một người, không tiếp tục chọn được người khác
- Để rõ hơn mình xin phép gửi đường link video để mọi người xem dễ hiểu hơn (
)
Theo video code làm được những việc là:
+ Gõ ký tự ngẫu nhiên hiện ra giá trị gợi ý
+ Người dùng Tick vào để chọn một giá trị
+ Xóa dữ liệu trong textbox và gõ tìm tên người khác
+ Sau đó Tick chọn và cộng dồn danh sách các nhân sự được chọn.
Mình đang bị bí khi chọn nhân sự khác thì xóa luôn dữ liệu đã chọn
Rất mong nhận được sự tư vấn, giúp đỡ
Xin chân thành cám ơn và xin phép mời cốc cà phê ạ.
 

File đính kèm

  • Code tim kiem textbox vs listbox.xlsb
    72.1 KB · Đọc: 96
Có lẽ ca này khó với diễn đàn. Tiếp tục hy vọng cao nhân sẽ ghé ngang.
 
Upvote 0
Có lẽ ca này khó với diễn đàn. Tiếp tục hy vọng cao nhân sẽ ghé ngang.
Muốn người khác giúp thì phải nói sao cho người ta hiểu. Tốt nhất là liệt kê các thao tác liên tiếp và cho ví dụ cụ thể.

Vd. mô tả: tôi gõ hichic vào * -> click chuột vào ** -> code sẽ làm ***, tiếp theo tôi gõ blala vào * -> click vào **, code sẽ làm ***. Cứ như thế đến chán đến ớn thì thôi. Nhưng bây giờ tôi muốn sau khi gõ * và click chuột vào ** thì code làm cái này .... và cái này ..., và cả cái này ... nữa.

Chỉ ai rỗi hơi mới bỏ thời gian công sức ra đoán cái ý "khi chọn nhân sự khác thì xóa luôn dữ liệu đã chọn". Cụ thể là xóa gì, ở đâu, xóa vĩnh viễn dữ liệu nguồn hay đơn giản không phải là XÓA dữ liệu nguồn mà chỉ là LỜ những kết quả được chọn khi lọc những lần tiếp theo?
 
Upvote 0
Muốn người khác giúp thì phải nói sao cho người ta hiểu. Tốt nhất là liệt kê các thao tác liên tiếp và cho ví dụ cụ thể.

Vd. mô tả: tôi gõ hichic vào * -> click chuột vào ** -> code sẽ làm ***, tiếp theo tôi gõ blala vào * -> click vào **, code sẽ làm ***. Cứ như thế đến chán đến ớn thì thôi. Nhưng bây giờ tôi muốn sau khi gõ * và click chuột vào ** thì code làm cái này .... và cái này ..., và cả cái này ... nữa.

Chỉ ai rỗi hơi mới bỏ thời gian công sức ra đoán cái ý "khi chọn nhân sự khác thì xóa luôn dữ liệu đã chọn". Cụ thể là xóa gì, ở đâu, xóa vĩnh viễn dữ liệu nguồn hay đơn giản không phải là XÓA dữ liệu nguồn mà chỉ là LỜ những kết quả được chọn khi lọc những lần tiếp theo?
Cám ơn anh.
Cái này em diễn tả thật sự cũng hơi khó hiểu nên em có gửi kèm cái video đại khái.
B1: có 1 textbox dùng đễ gõ 1 vài ký tự gợi ý để tìm tên cần tìm Listbox sẽ hiển thị.
B2: Click chọn sau đó lặp lại B1 để tìm và chọn tên người thứ 2 và có thể lặp lại đến n người.
 
Upvote 0
Cám ơn anh.
Cái này em diễn tả thật sự cũng hơi khó hiểu nên em có gửi kèm cái video đại khái.
B1: có 1 textbox dùng đễ gõ 1 vài ký tự gợi ý để tìm tên cần tìm Listbox sẽ hiển thị.
B2: Click chọn sau đó lặp lại B1 để tìm và chọn tên người thứ 2 và có thể lặp lại đến n người.
Sao tôi thấy cái này nó giống na ná như cái bài tìm kiếm của ongke hay cua hansabi thì phải, bạn tìm thử xem
 
Upvote 0
Mình thử dịch sang tiếng Việt những gì bạn chủ bài đăng cần, nếu sai thì chủ bài đăng cảnh báo dùm nha:
Đang có 1 CSDL cỡ ngàn HV
B1: Tìm ra danh sách các em họ Nguyễn => ví dụ kết quả có 99 em; Chủ bài đăng chấm lấy 1 em
(Theo mình thì nên chuyển em đã chọn này sang 1 ListBox khác liền kề;)
Bước tiếp theo là lấy ra các em họ trần, giả dụ hiện lên 75 em & tiếp tục chọn 1 từ 75 em này (& bỏ vô ListBox thứ 2)
Cứ thực hiện như thế đến lúc đả nư là chủ bài đăng có ngần ấy em HS cần trong ListBox thứ 2 (???)
 
Upvote 0
Cám ơn anh.
Cái này em diễn tả thật sự cũng hơi khó hiểu nên em có gửi kèm cái video đại khái.
B1: có 1 textbox dùng đễ gõ 1 vài ký tự gợi ý để tìm tên cần tìm Listbox sẽ hiển thị.
B2: Click chọn sau đó lặp lại B1 để tìm và chọn tên người thứ 2 và có thể lặp lại đến n người.
Tôi nhìn Form của bạn và ảnh của video tôi thấy khác nhau hoàn toàn nên tôi không tải video.

Bạn viết và tôi đoán mò là mỗi lần lọc là chỉ chọn 1 mục trong ListBox rồi ListBox được xóa. Nhưng nhìn và thử thì thấy có thể chọn được nhiều mục cùng lúc. Vậy nếu chỉ chọn 1 thì MultiSelect để làm gì? Để làm cảnh? Còn nếu là để chọn nhiều mục cùng lúc thì mô tả lại không đúng.

Mà có xem video thì tôi cũng chịu không biết hiểu "khi chọn nhân sự khác thì xóa luôn dữ liệu đã chọn" như thế nào cho đúng.

Phải mô tả kỹ. Thế thôi.

Mà tôi thấy có 2 người hiểu ý bạn rồi đấy. Chờ họ ra tay thôi.
 
Upvote 0
Mình thử dịch sang tiếng Việt những gì bạn chủ bài đăng cần, nếu sai thì chủ bài đăng cảnh báo dùm nha:
Đang có 1 CSDL cỡ ngàn HV
B1: Tìm ra danh sách các em họ Nguyễn => ví dụ kết quả có 99 em; Chủ bài đăng chấm lấy 1 em
(Theo mình thì nên chuyển em đã chọn này sang 1 ListBox khác liền kề;)
Bước tiếp theo là lấy ra các em họ trần, giả dụ hiện lên 75 em & tiếp tục chọn 1 từ 75 em này (& bỏ vô ListBox thứ 2)
Cứ thực hiện như thế đến lúc đả nư là chủ bài đăng có ngần ấy em HS cần trong ListBox thứ 2 (???)
Vâng cám ơn anh. Đúng là ý em như vậy.
Nhưng hiện tại thì em mới chỉ tìm được 1 HV trong data, nếu tìm tiếp HV thứ 2 thì history của HV1 không được lưu lại mà nó bị Clear hết sau đó mới bắt đầu tìm kiếm (theo file em đính kèm)
- Cái hay của code trong video em gửi kèm là: tìm bạn Nguyễn Văn A --> Click chọn ---> Xóa trắng Textbox --> Gõ B tìm được bạn Cù thị B --> Click chọn thì lúc này 2 kết quả được chọn sẽ tự động move lên đầu ListBox và sử dụng 1 ListBox.
Rất mong nhận được mọi ý kiến đóng góp/ gợi ý/ hỗ trợ.
Xin cảm ơn và hậu tạ ạ.
Bài đã được tự động gộp:

Sao tôi thấy cái này nó giống na ná như cái bài tìm kiếm của ongke hay cua hansabi thì phải, bạn tìm thử xem
Cám ơn bạn nhé.
Bài này lâu chưa bạn he? Để mình search so sánh và tham khảo hy vọng có chút tương quan nào đó.
 
Upvote 0
Code được nhưng mất công. Chọn ẻm nào bỏ qua listbox kế bên cho dễ.
Dạ vâng em cám ơn anh.
Giải pháp đẩy qua ListBox thứ 2 em cũng có tìm hiểu và áp dụng. Tuy nhiên em thấy tích hợp trên 1 ListBox thấy gọn và thú vị quá, tất nhiên em nghĩ tích hợp thì có thể tốc độ xử lý sẽ chậm hơn.
Bài đã được tự động gộp:

Nếu thích ghi vào cái gì đó... Thì mình ghi vào một biến cũng được.
Rất mong được các bậc tiền bối ra tay để các ae tụi em đi sau được mở mang tầm mắt và học hỏi thêm kiến thức ạ. Chân thành cám ơn.
 
Upvote 0
code trong cái video kia là do mình viết cho một người bạn, nhìn cái form màu xanh kia là nhận ra ngay, với bài này có vẻ dùng hai listbox như một số thành viên chia sẻ là đơn giản và xịn sò hơn cả.
 
Upvote 0
Dạ vâng em cám ơn anh.
Giải pháp đẩy qua ListBox thứ 2 em cũng có tìm hiểu và áp dụng. Tuy nhiên em thấy tích hợp trên 1 ListBox thấy gọn và thú vị quá, tất nhiên em nghĩ tích hợp thì có thể tốc độ xử lý sẽ chậm hơn.
Bài đã được tự động gộp:


Rất mong được các bậc tiền bối ra tay để các ae tụi em đi sau được mở mang tầm mắt và học hỏi thêm kiến thức ạ. Chân thành cám ơn.
Nếu biết cách đẩy qua Listbox thứ 2, thì lần 1 thử đẩy qua 1 biến trung gian (phần tử thứ nhất), khi chọn lần 2 (có 1 ẻm mới) thì add thêm biến trung gian đó vào nữa thành 2 phần tử. Tương tự khi chọn lần 3 thì biến trung gian 2 phần tử, add 2 phần tử này thêm vào 1 mới chọn thành 3. Cứ thế và cứ thế
 
Upvote 0
code trong cái video kia là do mình viết cho một người bạn, nhìn cái form màu xanh kia là nhận ra ngay, với bài này có vẻ dùng hai listbox như một số thành viên chia sẻ là đơn giản và xịn sò hơn cả.
Dùng 2 list box code sẽ phức tạp khi đã chọn rồi đổi ý bỏ chọn
 
Upvote 0
Dùng 2 list box code sẽ phức tạp khi đã chọn rồi đổi ý bỏ chọn
Bỏ chọn trong list 2, rồi kết quả cuối chỉ lấy xuống những ẻm còn đánh dấu. Muốn trực quan thì lọc lại list 2 chỉ để lại những ẻm còn đánh dấu
 
Upvote 0
Xem các anh thảo luận em thấy hơi rối. Anh @HieuCD giúp em được không ạ?
Thay sub Loc
Mã:
Option Explicit
Option Compare Text

Sub loc()
  Dim Dulieu(), Dic As Object, iKey, k&, iD&, i, c&

  Dulieu = Sheet1.Range("E3:E51").Value
  Set Dic = CreateObject("scripting.dictionary")
  iD = detnhap.ListBox1.ListCount
  For i = 0 To iD - 1
    If detnhap.ListBox1.Selected(i) = True Then
      Dic.Item(detnhap.ListBox1.List(i)) = ""
    End If
  Next i
  Call an
  If Dic.Count > 0 Then
    For Each iKey In Dic.keys
      detnhap.ListBox1.AddItem iKey
      detnhap.ListBox1.Selected(k) = True
      k = k + 1
    Next
  End If
 
  c = 1
  For i = 1 To UBound(Dulieu)
      If Dulieu(i, c) <> "" Then
          If TV(Dulieu(i, c)) Like TV("*" & detnhap.txttencn.Value & "*") Then
            If Dic.exists(Dulieu(i, c)) = False Then
              detnhap.ListBox1.AddItem Dulieu(i, c)
            End If
          End If
      End If
    Next
End Sub
 
Upvote 0
Thay sub Loc
Mã:
Option Explicit
Option Compare Text

Sub loc()
  Dim Dulieu(), Dic As Object, iKey, k&, iD&, i, c&

  Dulieu = Sheet1.Range("E3:E51").Value
  Set Dic = CreateObject("scripting.dictionary")
  iD = detnhap.ListBox1.ListCount
  For i = 0 To iD - 1
    If detnhap.ListBox1.Selected(i) = True Then
      Dic.Item(detnhap.ListBox1.List(i)) = ""
    End If
  Next i
  Call an
  If Dic.Count > 0 Then
    For Each iKey In Dic.keys
      detnhap.ListBox1.AddItem iKey
      detnhap.ListBox1.Selected(k) = True
      k = k + 1
    Next
  End If

  c = 1
  For i = 1 To UBound(Dulieu)
      If Dulieu(i, c) <> "" Then
          If TV(Dulieu(i, c)) Like TV("*" & detnhap.txttencn.Value & "*") Then
            If Dic.exists(Dulieu(i, c)) = False Then
              detnhap.ListBox1.AddItem Dulieu(i, c)
            End If
          End If
      End If
    Next
End Sub
Hay quá anh ơi, đúng như em đang mong đợi.
Em chân thành cám ơn anh và mời anh ly cà phê nhé.
 
Upvote 0
Web KT

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

Back
Top Bottom