Tạo List tìm kiếm cho mã hàng hóa

Liên hệ QC

0905744404

Thành viên thường trực
Tham gia
26/10/10
Bài viết
333
Được thích
107
Nghề nghiệp
Trước là : Thủ Kho - còn giờ thì :"Tài Xế"
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à!!!
 
Vậy thì bạn cứ đưa file lên đây, ghi rõ yêu cầu thế nào rồi kết quả mong muốn là gì thì người khác mới có thể giúp các bạn được.
Em xin gửi lại file của anh làm ví dụ nhé. Em muốn ghi 1 tên không có trong danh sách thì phải làm sao. Nếu có thể trong phần code anh ghi chú cho em 1 ít thông tin để em biết nhé. Thanks anh!!!
 

File đính kèm

  • drop-down-list-HTN.xlsm
    30.9 KB · Đọc: 39
Upvote 0
Có ai giúp em giải quyết được vấn đề trên không giúp e với. E đang rất cần.
 
Upvote 0
Em xin gửi lại file của anh làm ví dụ nhé. Em muốn ghi 1 tên không có trong danh sách thì phải làm sao. Nếu có thể trong phần code anh ghi chú cho em 1 ít thông tin để em biết nhé. Thanks anh!!!
Giờ nếu không có trong danh sách, cập nhật vào danh sách và hiển thị trong combobox đúng không?
 
Upvote 0
Giờ nếu không có trong danh sách, cập nhật vào danh sách và hiển thị trong combobox đúng không?
Cập nhật vào danh sách và hiển thị thì em bình thường thôi ko có gì cả, Ý em hỏi là nếu em có 1 cái tên mà ko muốn cập nhật vào danh sách (vì tên này là trường hợp ngoại lệ) thì em muốn gõ tên đó vào ô đc ko? Hiện tại nếu em gõ tên ko có trong danh sách ( ví dụ: nguyen van a) rồi nhấn enter thì cell trống trơn ko nhận cái tên đó, nên muốn làm điều này thì em phải sửa phần target.row > 2 thành target.row = 2 rồi điền xong thì lại chỉnh lại thành > 2.
 
Upvote 0
Cám ơn bạn nhiều, hiện tại mình đang muốn hoàn thiện nốt phần code kia đã, mình muốn hiểu thật rõ ràng sau đó mới chuyển sang cái khác. Sau này mình sẽ nghiên cứu về add-in này sau. Hi vọng lúc đó bạn sẽ chia sẻ cho mình ít bí quyết.
 
Upvote 0
Bạn xem file. Tưởng bạn biết chút gì về VBA chứ làm từ A tới Z thế này chắc sẽ bị "chèo kéo" liên tục quá!
nhờ file của anh e đã xây dựng được file theo dõi, tuy nhiên file theo dõi của e càng ngày càng lớn lên khi tìm dữ liệu bị mất rất nhiều thời gian, anh vui lòng xem lại giúp file và giúp đỡ để file có thể nhanh hơn được không, em cám ơn a nhiều
 

File đính kèm

  • nhap thanh pham.xlsb
    294.3 KB · Đọc: 20
Upvote 0
Hôm nay tôi mới coi lại bài này, làm cho bạn cũng khá "chua" vì bạn sử dụng 2 nguồn mã một lúc trong một sheet (Mã Vật tư và Mã Khách hàng).

Sau đây là toàn bộ code:

Tại Standard Module:

Mã:
Public pubArrKH, pubArrVT
Public pubUbdKH As Long, pubUbdVT As Long


Sub ArrCreate()


    Dim Sh As Worksheet
    Dim HangCuoi As Long
   
    Set Sh = Sheets("DMKH")
    HangCuoi = Sh.Range("D" & Rows.Count).End(xlUp).Row
   
    pubArrKH = Sh.Range("D5:E" & HangCuoi)
    pubUbdKH = UBound(pubArrKH)
   
    Set Sh = Sheets("Ton DK")
    HangCuoi = Sh.Range("B3").End(xlDown).Row
   
    pubArrVT = Sh.Range("B4:D" & HangCuoi)
    pubUbdVT = UBound(pubArrVT)


End Sub

Tại Sheet Module:

Sự kiện của WorkSheet:

Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[COLOR=#ff0000]    ''Neu co su Copy hay Cut thi khong thuc hien code:[/COLOR]
    If Application.CutCopyMode Then Exit Sub
[COLOR=#ff0000]    ''De chay lai sau khi Copy nhan nut Esc.[/COLOR]


    With ComboBox1
        If Selection.Count = 1 And Target.Row > 4 And _
            (Target.Column = 4 Or Target.Column = 6) Then
            Dim Cot1 As Single, Cot2 As Single, Cot3 As Single
            If .Visible = True Then
                .Visible = False
            End If
            .Text = ""
            If Not IsArray(pubArrKH) Then
                Call ArrCreate
            End If
            If Target.Column = 4 Then
                If .ColumnCount <> 2 Then
                    .ColumnCount = 2
                    .List = pubArrKH
                    With Target
                        Cot1 = .Width
                        Cot2 = .Offset(, 1).Width
                    End With
                    .ListWidth = Cot1 + Cot2
                    .ColumnWidths = Cot1 - 6
                End If
                If .ListCount < pubUbdKH Then
                    .List = pubArrKH
                End If
            ElseIf Target.Column = 6 Then
                If .ColumnCount <> 3 Then
                    .ColumnCount = 3
                    .List = pubArrVT
                    With Target
                        Cot1 = .Width
                        Cot2 = .Offset(, 1).Width
                        Cot3 = .Offset(, 2).Width
                    End With
                    .ListWidth = Cot1 + Cot2 + Cot3
                    .ColumnWidths = Cot1 - 6 & ";" & Cot2 + 6 & ";" & Cot3 - 18
                End If
                If .ListCount < pubUbdVT Then
                    .List = pubArrVT
                End If
            End If
            .Top = Target.Top
            .Left = Target.Left
            .Height = Target.Height + 3
            .Width = Target.Width
            .Visible = True
            .Activate
        Else
            If .Visible = True Then
                .Visible = False
            End If
        End If
    End With
End Sub


Sự kiện của ComboBox:

Mã:
Private Sub ComboBox1_Change()
    With ComboBox1
        If .MatchFound Then
            ActiveCell.Value = .Value
            ActiveCell.Offset(, 1) = .List(, 1)
            If .ColumnCount = 3 Then
                ActiveCell.Offset(, 2) = .List(, 2)
            End If
        End If
    End With
End Sub


Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
[COLOR=#ff0000]    ''Bam Enter se xuong 1 hang[/COLOR]
    If KeyCode = 13 Then
        ActiveCell.Offset(1).Select
[COLOR=#ff0000]    ''Bam Tab se dich chuyen ngang 1 cot:[/COLOR]
    ElseIf KeyCode = 9 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(pubArrVT) Then Exit Sub
    Select Case KeyCode
    Case 9, 13, 37 To 40
    Case Else
        Dim StrItem As String
        Dim n As Long, r As Long
        Dim c As Byte, col As Byte
        Dim GetRows(), ArrFilter()
        If ComboBox1 > "" Then ComboBox1.DropDown
        col = IIf(CheckBox1, 1, 2)
        StrItem = "*" & UCase(ComboBox1) & "*"
        If ComboBox1.ColumnCount = 2 Then
            For r = 1 To pubUbdKH
                If UCase(pubArrKH(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 2)
                For c = 1 To 2
                    For r = 1 To n
                        ArrFilter(r, c) = pubArrKH(GetRows(r), c)
                    Next
                Next
                ComboBox1.List = ArrFilter
            Else
                ComboBox1.List = Array()
            End If
        Else
            For r = 1 To pubUbdVT
                If UCase(pubArrVT(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) = pubArrVT(GetRows(r), c)
                    Next
                Next
                ComboBox1.List = ArrFilter
            Else
                ComboBox1.List = Array()
            End If
        End If
    End Select
End Sub

Những điều cần lưu ý:

1) Code thực hiện trên sheet Nhap - Xuat

2) ComboBox chỉ hiện lên khi chọn 1 ô bất kỳ trên cột D và cột F

3) ComboBox không hiện lên khi bạn đang Copy hay Cut. Sau khi Paste xong, muốn code chạy lại thì bạn bấm nút Esc.

4) Khi đang thao tác trên ComboBox, muốn xuống hàng bạn bấm nút Enter, khi muốn qua một cột bấm nút Tab.

5) Trên dòng trên cùng (hàng 1) có một CheckBox (By ID) màu xanh, nếu bạn check vào nó thì khi bạn gõ trên ComboBox nó sẽ lọc theo Mã, còn không check thì nó sẽ lọc theo Tên (khách hàng hoặc vật tư).
anh ơi, code anh chạy trên excel 2007 bị lỗi overflow anh ạ, chỗ selection.count=1
 
Upvote 0
Anh Nghĩa giúp chỗ Wrap Text cột đi anh, dữ liệu để xấu quá lại phải căn chỉnh tay
Em gửi ảnh trước và sau khi áp dụng code mà nó không wrap text
 

File đính kèm

  • 1.PNG
    1.PNG
    11.5 KB · Đọc: 20
  • 2.PNG
    2.PNG
    16 KB · Đọc: 20
Lần chỉnh sửa cuối:
Upvote 0
Các bro sửa giúp chỗ định dạng trên với ạ
 
Upvote 0
Anh Nghĩa giúp chỗ Wrap Text cột đi anh, dữ liệu để xấu quá lại phải căn chỉnh tay
Em gửi ảnh trước và sau khi áp dụng code mà nó không wrap text
- Cái vụ sử dụng Wrap Text đối với những Cell bị gộp (Merge and Center) không dễ dàng gì đâu.
- Ngày 09/5/208 anh có mặt Vũng Tàu em có giao lưu cà phê được không?
 
Upvote 0
- Cái vụ sử dụng Wrap Text đối với những Cell bị gộp (Merge and Center) không dễ dàng gì đâu.
- Ngày 09/5/208 anh có mặt Vũng Tàu em có giao lưu cà phê được không?
Thứ 1: Cái này không Merge anh ạ, chỉ Wrap Text cho nó đẹp thôi. Đối với những dữ liệu chiều dài vượt quá độ rộng của Cell nó không wrap text mặc dù đã định dạng sẵn ạ
Thứ 2: Anh cứ xuống Vũng Tàu alo em, hôm đó em có đoàn thanh tra sẽ cố gắng ngồi giao lưu cafe hay gì đó với anh
 
Upvote 0
Thứ 1: Cái này không Merge anh ạ, chỉ Wrap Text cho nó đẹp thôi. Đối với những dữ liệu chiều dài vượt quá độ rộng của Cell nó không wrap text mặc dù đã định dạng sẵn ạ
Thứ 2: Anh cứ xuống Vũng Tàu alo em, hôm đó em có đoàn thanh tra sẽ cố gắng ngồi giao lưu cafe hay gì đó với anh
Vậy Copy mấy cái File hôm trước em hỏi về mấy cái Biên bản nghiệm thu vào USB (anh có Laptop), có gì anh đến xem nội dung em cần anh hiểu cụ thể mới giúp được.
 
Upvote 0
Chào anh Nghĩa
Từ hướng dẫn của anh, em làm file riêng của mình như file đính kèm
Code chạy rồi nhưng list trong combobox luôn hiển thị 3 cột, tuy nhiên em muốn list trong combobox hiển thị 5 cột (thêm 2 cột Ngày nhập và Giá nhập từ Sheet Bảng Mã Hàng Hóa) nhưng em chưa biết làm cách nào
Mong anh hướng dẫn giúp
Cảm ơn anh
Bạn làm Hiển thị dc 5 cột không, sao tôi vẫn k hiển thị dc
 
Upvote 0
Chào anh Nghĩa
Từ hướng dẫn của anh, em làm file riêng của mình như file đính kèm
Code chạy rồi nhưng list trong combobox luôn hiển thị 3 cột, tuy nhiên em muốn list trong combobox hiển thị 5 cột (thêm 2 cột Ngày nhập và Giá nhập từ Sheet Bảng Mã Hàng Hóa) nhưng em chưa biết làm cách nào
Mong anh hướng dẫn giúp
Cảm ơn anh
sao k hiển thị 5 cột dc bạn
 
Upvote 0
Web KT
Back
Top Bottom