Tạo List tìm kiếm cho mã hàng hóa
Chào cả nhà !!!
Em có File này nhờ mọi người giúp em với!
Yêu cầu:
– Bên Sheet "Xuất Kho" khi nhập dữ liệu vào cột F thì tự động tìm kiếm ra những ký tự có trong List tại cột G trong sheet "Bang Ma Hang Hoa"
– Ví Dụ: Nhập bánh thì trong list xuất hiện những chữ ô có chữ bánh, Hoặc nhập 360 thì xuất hiện những ô có chứa 360, Hoặc nhập 288 thì xuất hiện những ô có chứa 288 …
Em xin cám ơn cả nhà!!!
Tôi có vài thắc mắc:
1) Có nhất thiết phải có cột "Chọn mã hàng" hay không? Bởi chỉ cần nhập vào mã hàng tại cột "Mã hàng" thì tự nhiên nó sẽ tính dựa trên mã hàng này. Tôi nghĩ nên bỏ đi.
2) Bạn muốn dùng List hay lập trình bằng ComboBox?
Em muốn tạo lits và tự động tìm kiếm những điều kiện như em đã nêu trên…
có thể viết bằng code…Tại vì trong mã hàng của em có rất nhiều mã hàng, nên phải tạo tìm kiếm như vậy.
1) Thay vì dùng List validation, cái này nó chỉ hiển thị đúng 1 cột, mất công phải viết nhiều code, thì tôi lại dùng ComboBox, nó vừa hiển thị được nhiều cột vừa tạo được các sự kiện để tìm kiếm theo key mà bạn gõ vào nó.
2) Tôi đã bỏ cột Chọn mã hàng vì nó không cần thiết
3) Tôi cũng Trim(Mã hàng) để chúng không có khoảng trắng đằng sau ở cột Mã hàng (cột B của sheet Bang Ma Hang Hoa).
4) Bạn tự chỉnh sửa lại công thức tại sheet In Toa
5) Tại cột Mã hàng (cột F, Xuat Kho) tôi có đặt 1 checkbox, nếu nó được check thì sẽ tìm theo Tên Hàng, còn không thì nó tìm theo Mã Hàng.
6) Nói chung, có gì thắc mắc thì bạn hỏi tiếp.
Thủ tục tạo mảng dữ liệu trong Standard Module:
Public pubArrList
Public pubUBound As Long
Sub ArrCreate()
Dim HangCuoi As Long
Dim ShBangMa As Worksheet
Set ShBangMa = Sheets("Bang Ma Hang Hoa")
HangCuoi = ShBangMa.Range("B" & Rows.Count).End(xlUp).Row
pubArrList = ShBangMa.Range("B2:D" & HangCuoi)
pubUBound = UBound(pubArrList)
End Sub
Thủ tục sự kiện trong Sheet Module:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ComboBox1
If Selection.Count = 1 And Target.Row > 2 And Target.Column = 6 Then
If Not IsArray(pubArrList) Then
Call ArrCreate
.List = pubArrList
End If
.Visible = False
.Text = ""
If .ListCount < pubUBound Then
.List = pubArrList
End If
.Top = Target.Top
.Left = Target.Left
.Height = Target.Height
.Width = Target.Width
.Visible = True
.Activate
Else
If .Visible = True Then
.Visible = False
End If
End If
End With
End Sub
Private Sub ComboBox1_Change()
With ComboBox1
If .MatchFound Then
ActiveCell.Value = .Value
ActiveCell.Offset(, 1) = .List(, 1)
ActiveCell.Offset(, 2) = .List(, 2)
End If
End With
End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
ActiveCell.Offset(1).Select
End If
End Sub
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Not IsArray(pubArrList) Then Exit Sub
Select Case KeyCode
Case 9, 13, 37 To 40
Case Else
If ComboBox1 > "" Then ComboBox1.DropDown
Dim StrItem As String
Dim n As Long, r As Long
Dim c As Byte, col As Byte
Dim GetRows(), ArrFilter()
col = IIf(CheckBox1, 2, 1)
StrItem = "*" & UCase(ComboBox1) & "*"
For r = 1 To pubUBound
If UCase(pubArrList(r, col)) Like StrItem Then
n = n + 1
ReDim Preserve GetRows(1 To n)
GetRows(n) = r
End If
Next
If n > 0 Then
ReDim ArrFilter(1 To n, 1 To 3)
For c = 1 To 3
For r = 1 To n
ArrFilter(r, c) = pubArrList(GetRows(r), c)
Next
Next
ComboBox1.List = ArrFilter
Else
ComboBox1.List = Array()
End If
End Select
End Sub
Để tìm theo Mã Số:
Sau khi bỏ check, tôi chọn một ô nào đó để nó hiện CBB lên và gõ vào chữ M thì các mã có chứa M hiện ra.
4009
Để tìm theo Tên Hàng:
Tôi check vào đó và gõ vào từ khóa có liên quan đến tên hàng trong CBB.
4008www.giaiphapexcel.com/diendan/threads/t%E1%BA%A1o-list-t%C3%ACm-ki%E1%BA%BFm-cho-m%C3%A3-h%C3%A0ng-h%C3%B3a.94417/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Bình luận