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à!!!
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à!!!
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?
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.
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.
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:
Mã:
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:
Mã:
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
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:
Mã:
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:
Mã:
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
Em cám ơn bác!!
Nhưng ý của em là: - 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 cám ơn bác!!
Nhưng ý của em là: - 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 ...
Chỗ này tôi cũng đã xem qua nhưng không thể hiện được giống như tôi muốn vì chỉ tìm được những ký tụ đầu thôi,
trước khi tạo đè tài tôi đã xem rất kỹ bài này rồi. Bài này của thầy " Ndu" ma...
Túm lại là cái file tôi đưa lên bạn đã thử chưa cái đã. Mục đích của bạn chỉ là chọn một mã hàng/ tên hàng nào đó trong List rồi nhập vào bảng đó thôi, phải vậy không?
Túm lại là cái file tôi đưa lên bạn đã thử chưa cái đã. Mục đích của bạn chỉ là chọn một mã hàng/ tên hàng nào đó trong List rồi nhập vào bảng đó thôi, phải vậy không?
Như vậy đã rất tuyệt rồi, nhưng em muốn tham hơn một chút nữa:
khi nhập vào dữ liệu mà không cần dùng ComboBox mà vẫn tìm được như vậy có được không? Im Lặng + Cám Ơn = Đồng ý
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à!!!
Như vậy đã rất tuyệt rồi, nhưng em muốn tham hơn một chút nữa:
khi nhập vào dữ liệu mà không cần dùng ComboBox mà vẫn tìm được như vậy có được không? Im Lặng + Cám Ơn = Đồng ý
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:
Mã:
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:
Mã:
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
Đúng thế code là của Thày Ndu tôi đã áp dụng và tôi đã quản lý không cần mã, chỉ gõ chữ bất kỳ có trong tên hàng dù ở đầu, ở giữa hay cuối tên hàng đều hiện ra mà
Anh Trọng Nghĩa ơi! sao khi em chép Code vào file gốc của em thì Code không chạy vậy???
Báo lỗi màu vàng không chạy ( dòng chữ đỏ bên dưới)
Mã:
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
[COLOR=#b22222][B] .List = pubArrList[/B][/COLOR]
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