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à!!!
 
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á!
anh thông cảm e từ trước đến giờ mới chỉ tiếp xúc với công thức, thậm chí công thức còn chưa rành, ở sheet thẻ kho thì anh làm giúp e ok rồi, e vào view trong sheet BCNCC và copy code trong sheet thẻ kho sang sau khi lưu lại thì file excel báo lỗi, anh làm ơn hướng dẫn e làm sheet BCNCC giống với thẻ kho được không, e cám ơn anh rất nhiều
 
Upvote 0
anh thông cảm e từ trước đến giờ mới chỉ tiếp xúc với công thức, thậm chí công thức còn chưa rành, ở sheet thẻ kho thì anh làm giúp e ok rồi, e vào view trong sheet BCNCC và copy code trong sheet thẻ kho sang sau khi lưu lại thì file excel báo lỗi, anh làm ơn hướng dẫn e làm sheet BCNCC giống với thẻ kho được không, e cám ơn anh rất nhiều
Ui trời ơi, đúng như mình dự đoán "quơ cúp", thôi bạn tải cái file này về và xài luôn đi.
 

File đính kèm

  • NhapThanhPham3.xlsm
    167.2 KB · Đọc: 105
Upvote 0
Upvote 0
Mình giờ muốn hiện thêm ô từ F-I? nhưng mình chưa biết thay đổi j ở trong code? và mình muốn di chuyển ô hiện từ D=>B ?
 
Upvote 0
Ui trời ơi, đúng như mình dự đoán "quơ cúp", thôi bạn tải cái file này về và xài luôn đi.
anh ơi ở sheet báo cáo nhà cung cấp mã lọc là mã khách hàng mà, a xem rồi chỉnh lại giúp e với, hiện tại anh vẫn đang để là mã vật tư chứ không phải mã khách
 

File đính kèm

  • NhapThanhPham3.xlsm
    165.3 KB · Đọc: 9
Upvote 0
anh ơi ở sheet báo cáo nhà cung cấp mã lọc là mã khách hàng mà, a xem rồi chỉnh lại giúp e với, hiện tại anh vẫn đang để là mã vật tư chứ không phải mã khách
Uhm, sửa lại tí thôi mà! Bạn mà biết tí gì về code thì cũng sửa dễ dàng thôi. ;;;;;;;;;;;
 

File đính kèm

  • NhapThanhPham4.xlsm
    166.7 KB · Đọc: 68
Upvote 0
Uhm, sửa lại tí thôi mà! Bạn mà biết tí gì về code thì cũng sửa dễ dàng thôi. ;;;;;;;;;;;
e cũng muốn biết tí mà đọc mãi không được cái gì vào đầu cả, tìm trên mạng nhưng toàn tài liệu nói khó hiểu mà không đúng với mục đích sử dụng của e. anh có tài liệu nào dễ hiểu về VBA thì làm ơn cho e xin được không, em cám ơn
 
Upvote 0
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


Code này hình như có vấn đề rồi anh ơi. Nghĩa là nó không update được tên hàng, đơn giá, đơn vị tính. Anh thử vào sheet danh mục hàng hóa anh gõ 1 tên hàng khác đi, rồi anh quay lại nhập thữ xem. chỉ khi nào tắt file đi mở lại nó mới update
 
Upvote 0
Tôi chả hiểu bạn nói gì cả. Xem hình đi.

Để 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.

attachment.php



Để 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.

attachment.php

Code bạn không update kìa , như vậy cũng như không, khi người ta đổi tên hàng, đổi giá bán thì coi như sai bét luôn
 
Upvote 0
các anh cho e hỏi là khi e đang sử dụng file này trên excell 2010 thì mở ngon, mang sang excell 2007 thì lại không mở được, xin hỏi lý do tại sao ạuntitled.jpg
 
Upvote 0
mong mọi người chỉ cho e lỗi trên nhé
 
Upvote 0
ban kiem tra da ok chua
 

File đính kèm

  • DS hang.xls
    39.5 KB · Đọc: 52
Upvote 0
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

Anh Nghĩa ơi! Sao file này em mở trên Office 2010 thì codekhông chạy. Nhờ anh chỉ cách giúp em với. Tại giờ em muốn chuyển sang Office2010 để dùng luôn.
 

File đính kèm

  • TaoList.rar
    83.7 KB · Đọc: 23
  • TaoList.xlsm
    380 KB · Đọc: 36
Upvote 0
file này của bạn mình mở trên Office 2010 , 2013 , 32 bit , 64 bit đều hoạt động tốt , không biết máy của bạn xài Office nào

Gửi anh Hoàng Trọng Nghĩa . Cám ơn giải pháp của anh . Em đã gặp vấn đề tương tự và tìm đc giải pháp ở đây
Nhưng có 1 điều này mong anh giúp
khi ta chọn 1 item nào đó bằng Click chuột . chẳng hạn trong hình này là mã B15
1.jpg
ta đc giá trị item đó như trong hình
2.jpg
lúc này xảy ra vấn đề :
Khi ấn tiếp nút ARROW DOWN thì giá trị B15 bị đổi thành B16 (item tiếp theo trong List)
3.jpg

=> làm sổ sách sai => đuổi việc --=0
Mong muốn của em ở đây là làm sao sau khi chọn đc mã hàng mong muốn bằng cách click chuột thì khi bấm tiếp nút ARROW DOWN
sẽ nhảy Select xuống ô ngay dưới (mũi tên chỉ vào) hoặc ít nhất thì cũng ngăn tình trạng bị đổi mã hàng sau khi đã click chọn mã hàng xong
Mong đc giúp đỡ
 
Upvote 0
Anh Nghĩa ơi! Sao file này em mở trên Office 2010 thì codekhông chạy. Nhờ anh chỉ cách giúp em với. Tại giờ em muốn chuyển sang Office2010 để dùng luôn.
Bạn đã bấm vào nút Enable Editing chưa? Sau đó, bạn có bấm tiếp Enable Content chưa?

attachment.php


attachment.php
 

File đính kèm

  • Enable.jpg
    Enable.jpg
    84.1 KB · Đọc: 148
  • EnableContent.jpg
    EnableContent.jpg
    104.3 KB · Đọc: 145
Upvote 0
file này của bạn mình mở trên Office 2010 , 2013 , 32 bit , 64 bit đều hoạt động tốt , không biết máy của bạn xài Office nào

Gửi anh Hoàng Trọng Nghĩa . Cám ơn giải pháp của anh . Em đã gặp vấn đề tương tự và tìm đc giải pháp ở đây
Nhưng có 1 điều này mong anh giúp
khi ta chọn 1 item nào đó bằng Click chuột . chẳng hạn trong hình này là mã B15
View attachment 135230
ta đc giá trị item đó như trong hình
View attachment 135231
lúc này xảy ra vấn đề :
Khi ấn tiếp nút ARROW DOWN thì giá trị B15 bị đổi thành B16 (item tiếp theo trong List)
View attachment 135232

=> làm sổ sách sai => đuổi việc --=0
Mong muốn của em ở đây là làm sao sau khi chọn đc mã hàng mong muốn bằng cách click chuột thì khi bấm tiếp nút ARROW DOWN
sẽ nhảy Select xuống ô ngay dưới (mũi tên chỉ vào) hoặc ít nhất thì cũng ngăn tình trạng bị đổi mã hàng sau khi đã click chọn mã hàng xong
Mong đc giúp đỡ
Bạn đừng bấm nút mũi tên xuống sau khi đã chọn một mục nào đó trong list vì đó là bản chất của ComboBox rồi.

Nên bấm nút ENTER.
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom