Tìm mã khách nhanh thông qua việc gõ từ khóa vào textbook??? (1 người xem)

Liên hệ QC

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

minhcong.tckt

Thành viên thường trực
Tham gia
13/4/11
Bài viết
385
Được thích
36
Giới tính
Nam
Em gửi file đính kèm, mong các huynh tỷ giúp em sửa code để có thể tìm mã khách nhanh tại sheet "Nhan Ma" khi chuột phải form hiện lên:
Chỉ cần đánh đúng tên người thì listbook sẽ di chuyển đến mã khách tương ứng. Giống như việc mình dùng Ctrl + F để tìm kiếm vậy.

Chân thành cảm ơn!!!
 

File đính kèm

Em gửi file đính kèm, mong các huynh tỷ giúp em sửa code để có thể tìm mã khách nhanh tại sheet "Nhan Ma" khi chuột phải form hiện lên:
Chỉ cần đánh đúng tên người thì listbook sẽ di chuyển đến mã khách tương ứng. Giống như việc mình dùng Ctrl + F để tìm kiếm vậy.

Chân thành cảm ơn!!!
Bài này rất dễ.. Tôi đã viết sẵn hàm Filter2DArray, cứ thế mà xài thôi... nhưng dữ liệu của bạn có mấy dòng, làm biếng làm quá
(có đưa file lên cũng đưa độ 100 dòng chứ)
 
Upvote 0
Cách của anh Ndu thì tốt nhưng đòi hỏi kỹ thuật cao hơn. Mình muốn nêu cái mà chính List hay Combo có hỗ trợ.
Cái này nên dùng Combo thì hơn vì 2 trong 1 vừa nhập Text vừa có List
Mình vị dụ tìm tỉnh: Cần tìm Hà Nội ta cứ gõ chữ H thì lần lượt các tỉnh H hiện ra bao giò đến Hanoi thì enter
Thậm chí không cần mở danh sách cũng được
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cái này của cuongdoannhat làm cho mình. không biết có giúp gì được không. mình thấy khá hay. (Không phải của mình mà là cuongdoannhat "
)
 

File đính kèm

Upvote 0
Bài này rất dễ.. Tôi đã viết sẵn hàm Filter2DArray, cứ thế mà xài thôi... nhưng dữ liệu của bạn có mấy dòng, làm biếng làm quá
(có đưa file lên cũng đưa độ 100 dòng chứ)

Anh cho em cái hàm Filter2DArray, và hướng dẫn cụ thể cho em trên file em gửi với ạ
 

File đính kèm

Upvote 0

File đính kèm

Upvote 0
cảm ơn anh nhiều nha, đúng ý em rùi đấy ạ.%#^#$
 
Upvote 0
Nó đây
Gọi form, chỉ cần gõ gì đó vào TextBox thì ListBox sẽ hiện ra 1 danh sách tương ứng với từ khóa vừa gõ (giống tra từ điển ấy)
Lâu quá không viết code, tiện có file của NDU làm vậy nhờ luôn.
NDU làm thêm cho 1 nút chọn nếu tìm theo Mã nhé.
Cám ơn nhiều.
Mình thêm OptionButton1 và thêm dòng code sau
PHP:
Dim sArray, iCol&
Private Sub OB1_Click()
iCol = 1
End Sub
Để chon iCol
PHP:
Option Explicit
Dim sArray, iCol&
Private Sub OB1_Click()
iCol = 1
End Sub
Private Sub TB_Change()
  Dim Arr, FindStr As String
  On Error Resume Next
  FindStr = TB.Text
  Arr = Filter2DArray(sArray, iCol, "*" & FindStr & "*", False)
  'Arr = Filter2DArray(sArray, 2, "*" & FindStr & "*", False)
  If Not IsArray(Arr) Then LB.Clear: Exit Sub
  LB.List() = IIf(Trim(FindStr) = "", sArray, Arr)
  LB.Selected(0) = True
End Sub
Private Sub UserForm_Initialize()
  sArray = Sheets("DM").Range("DM").Value
  LB.List() = sArray
  LB.Selected(0) = True
End Sub
Private Sub Chon_Click()
  ActiveCell.Value = LB.Text
  Unload Me
End Sub
Private Sub LB_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Chon_Click
End Sub
Private Sub Thoat_Click()
 Unload Me
End Sub
Vậy NDU xem vậy có được không?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Lâu quá không viết code, tiện có file của NDU làm vậy nhờ luôn.
NDU làm thêm cho 1 nút chọn nếu tìm theo Mã nhé.
Cám ơn nhiều.
Trong code có đoạn:
Arr = Filter2DArray(sArray, 2, "*" & FindStr & "*", False)
Thay số 2 thành số 1 sẽ tìm theo MÃ (tham số này là ColIndex)
 
Upvote 0
Trong code có đoạn:
Arr = Filter2DArray(sArray, 2, "*" & FindStr & "*", False)
Thay số 2 thành số 1 sẽ tìm theo MÃ (tham số này là ColIndex)
Sửa code xong thì NDU đã gởi bài.
Cho mình hỏi thêm
PHP:
Private Sub UserForm_Initialize()
  sArray = Sheets("DM").Range("DM").Value
  ...
End Sub
Nếu ta không cần tạo name DM mà khi mở form thì ta tạo Name hay lấy Source thì liệu có ảnh hưởng nhiều về tốc độ.
Tựa như khi khởi động form thì lấy dòng cuối và tạo sArray=Range(...).Value
 
Upvote 0
Sửa code xong thì NDU đã gởi bài.
Cho mình hỏi thêm
PHP:
Private Sub UserForm_Initialize()
  sArray = Sheets("DM").Range("DM").Value
  ...
End Sub
Nếu ta không cần tạo name DM mà khi mở form thì ta tạo Name hay lấy Source thì liệu có ảnh hưởng nhiều về tốc độ.
Tựa như khi khởi động form thì lấy dòng cuối và tạo sArray=Range(...).Value
Không có vấn đề gì đâu ThuNghi à
Ví dụ:
PHP:
Private Sub UserForm_Initialize()
  With Sheets("DM")
    sArray = .Range(.[A2], .[B65536].End(xlUp)).Value
  End With
  LB.List() = sArray
  '........
End Sub
Tại trong file của tác giả có sẵn name DM nên làm luôn thôi
 
Upvote 0
Anh ndu96081631 ơi, nếu thêm 1 "Danh mục nữa" để có thể "tra từ điển như vậy thì sửa code này như thế nào ạ:

Private Sub UserForm_Initialize()
sArray = Sheets("DM").Range("DM").Value
LB.List() = sArray
LB.Selected(0) = True
End Sub
 
Upvote 0
Nhân tiện cho em hỏi luôn, em muốn cái listbook của em có các dòng kẻ dọc và ngang mờ mờ như trong bảng tính excel (in ra thì không nhìn thấy) thì mình làm thế nào ạ???
 
Upvote 0
Anh ndu96081631 ơi, nếu thêm 1 "Danh mục nữa" để có thể "tra từ điển như vậy thì sửa code này như thế nào ạ:

Private Sub UserForm_Initialize()
sArray = Sheets("DM").Range("DM").Value
LB.List() = sArray
LB.Selected(0) = True
End Sub
Cái này không hiểu? Them danh mục nữa là danh mục gì?
Nhân tiện cho em hỏi luôn, em muốn cái listbook của em có các dòng kẻ dọc và ngang mờ mờ như trong bảng tính excel (in ra thì không nhìn thấy) thì mình làm thế nào ạ???
ListBox không có khả năng này
 
Upvote 0
Cái này không hiểu? Them danh mục nữa là danh mục gì?

ListBox không có khả năng này

Tức là em có 1 sheet là: danh mục khách hàng (hiện tại: DM )
và 1 sheet là : Danh mục vật tư (giả sử có tên là DMVT )

Em lựa 1 trong 2 danh mục này thì đều có thể tìm kiếm như tra từ điển

Anh ơi, vậy listView mới có khả năng ạ??? mình làm thao tác nào ạ??
 
Upvote 0
Tức là em có 1 sheet là: danh mục khách hàng (hiện tại: DM )
và 1 sheet là : Danh mục vật tư (giả sử có tên là DMVT )
Em lựa 1 trong 2 danh mục này thì đều có thể tìm kiếm như tra từ điển
Thì bạn đặt 1 name nữa, tùy chọn sArray sẽ lấy dữ liệu từ name nào thôi ---> Quá dễ
Anh ơi, vậy listView mới có khả năng ạ??? mình làm thao tác nào ạ??
Hãy quên cái thằng ListView đi, nó là thứ dở ẹc nhất mà tôi biết:
- Không thể nạp được nguyên Array vào List
- Không hổ trợ tiếng Việt Unicode
Nếu thích hoành tráng thì nghiên cứu cái này:
http://www.giaiphapexcel.com/forum/showthread.php?51394-ADO-Kết-nối-truy-vấn-Excel-Database-vào-các-control-ở-Userform.&
Tuy nhiên, phải nói trước với bạn rằng: Muốn nhiều thì cực nhiều... Gọi là ĂN CHƠI PHẢI TỐN KÉM (code phải thêm rất nhiều)
 
Upvote 0
Thì bạn đặt 1 name nữa, tùy chọn sArray sẽ lấy dữ liệu từ name nào thôi ---> Quá dễ

Hãy quên cái thằng ListView đi, nó là thứ dở ẹc nhất mà tôi biết:
- Không thể nạp được nguyên Array vào List
- Không hổ trợ tiếng Việt Unicode
Nếu thích hoành tráng thì nghiên cứu cái này:
http://www.giaiphapexcel.com/forum/...n-Excel-Database-vào-các-control-ở-Userform.&
Tuy nhiên, phải nói trước với bạn rằng: Muốn nhiều thì cực nhiều... Gọi là ĂN CHƠI PHẢI TỐN KÉM (code phải thêm rất nhiều)

Em gửi file đính kèm , anh thay đổi tùy chọn sArray cho em với.
 

File đính kèm

Upvote 0
Có 2 vấn đề cần phải cụ thể:
-Lọc mã.
-Tìm mã.

Trên Listview có hỗ trợ phương thức FindItem khá ổn. Nó giống như find trên Excel :
-Một phần hay trọn nội dung.
-Cột tìm...v.v...
Kết hợp với phương thức EnsureVisible lôi cổ nó lên cho bạn.
Bạn có thể Google ra cả đống. Mình chép cho bạn tham khảo 1 đoạn Code tìm kiếm trên Listview nha.

Mã:
Private Sub Command1_Click()
   ' FindItem method.
   'Create an integer variable called intSelectedOption
   ' to store the index of the selected button
   ' Create a string variable called strFindMe. Use the InputBox
   ' to store the string to be found in the variable. Use the
   ' FindItem method to find the string. Option1 is used to
   ' switch the FindItem argument that determines where to look.
   
   Dim intSelectedOption As Integer
   Dim strFindMe As String
   If Option1(0).Value = True Then
      strFindMe = InputBox("Find in " & Option1(0).Caption)
      intSelectedOption = lvwText
   End If
   If Option1(1).Value = True Then
      strFindMe = InputBox("Find in " & Option1(1).Caption)
      intSelectedOption = lvwSubItem
   End If
   If Option1(2).Value = True Then
      strFindMe = InputBox("Find in " & Option1(2).Caption)
      intSelectedOption = lvwTag
   End If

   ' FindItem method returns a reference to the found item, so
   ' you must create an object variable and set the found item
   ' to it.
   Dim itmFound As ListItem   ' FoundItem variable.
   
   Set itmFound = ListView1. _
   FindItem(strFindMe, intSelectedOption, , lvwPartial)
   
   ' If no ListItem is found, then inform user and exit. If a
   ' ListItem is found, scroll the control using the EnsureVisible
   ' method, and select the ListItem.
   If itmFound Is Nothing Then  ' If no match, inform user and exit.
      MsgBox "No match found"
      Exit Sub
   Else
       itmFound.EnsureVisible ' Scroll ListView to show found ListItem.
       itmFound.Selected = True   ' Select the ListItem.
      ' Return focus to the control to see selection.
       ListView1.SetFocus
   End If
End Sub
 
Upvote 0
Vẫn file tại # 17, anh chị cho em hỏi:
Em muốn vừa ở sheet "Nhan Ma" và ở 1 sheet khác cũng đều có khả năng lựa chọn danh sách như ở sheet "Nhan Ma" thì ở Alt + F11 tại thisworkbook em thay đổi code như thế nạo ạ???

Mong anh chị giúp đỡ!!!
 
Upvote 0
Web KT

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

Back
Top Bottom