Trang 1 của 3 123 CuốiCuối
Kết quả 1 đến 10 của 25

Chủ đề: Tìm kiếm nhanh trong drop down list

  1. #1
    nguyenvanan91 Guest

    Tìm kiếm nhanh trong drop down list

    Ở sheet 2 của file đính kèm khi em kích vào nút drop down list để chọn mã hàng mình cần, có cách nào khi mình kích vào nút xoả xuống nó sẽ hiện hộp thoại để mình gõ vào đó mặt hàng cần tìm cho nhanh hoặc mình chỉ cần gõ P01A- nó sẽ hiện ra những mặt hàng có chữ bắt đầu bằng P01A như trong nút search của filter không? Mọi người giúp em với, em cảm ơn nhiều.

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi donhungtin2013
    Ở sheet 2 của file đính kèm khi em kích vào nút drop down list để chọn mã hàng mình cần, có cách nào khi mình kích vào nút xoả xuống nó sẽ hiện hộp thoại để mình gõ vào đó mặt hàng cần tìm cho nhanh hoặc mình chỉ cần gõ P01A- nó sẽ hiện ra những mặt hàng có chữ bắt đầu bằng P01A như trong nút search của filter không? Mọi người giúp em với, em cảm ơn nhiều.
    Với sheet2 tại cột B và C, bạn thử chọn 1 ô tại 2 cột đó, từ hàng 3 trở đi sẽ thấy nó.

    Gõ từ khóa chúng sẽ hiện ra tương ứng, không nhất thiết phải gõ từ đầu câu, chỉ cần gõ bất kỳ cụm từ nào trong đó và không phân biệt chữ thường hoặc chữ hoa.

    Ví dụ: Chuỗi là Hoang Trong Nghia, bạn chỉ cần gõ trong (Trong, TRONG, ...), hoặc gõ oang (OANG, oAng, ...) thì những mục có chứa các từ đó sẽ hiển thị để bạn chọn.

    Đây là toàn bộ code của bài này (code trong Module của Sheet2):


    Mã:
    Private priArray
    Private priColumn As Long
    Private priIsFocus As Boolean
    
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Count = 1 And Target.Row > 2 Then
            Dim e As Long
            Static ArrCode, ArrName
            If Target.Column = 2 Then
                If Not IsArray(ArrCode) Then
                    e = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
                    ArrCode = Sheet1.Range("B2:C" & e).Value2
                End If
                priColumn = 1
                priArray = ArrCode
                Call HienComboBox
            ElseIf Target.Column = 3 Then
                If Not IsArray(ArrName) Then
                    Dim ArrTmp
                    Dim r As Long, u As Long
                    e = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
                    ArrTmp = Sheet1.Range("B2:B" & e).Value2
                    ArrName = Sheet1.Range("C2:C" & e).Value2
                    u = UBound(ArrName)
                    ReDim Preserve ArrName(1 To u, 1 To 2)
                    For r = 1 To u
                        ArrName(r, 2) = ArrTmp(r, 1)
                    Next
                End If
                priColumn = -1
                priArray = ArrName
                Call HienComboBox
            Else
                Call AnComboBox
            End If
        Else
            Call AnComboBox
        End If
    End Sub
    
    
    Private Sub ComboBox1_Change()
        If priIsFocus Then Exit Sub
        If ComboBox1.MatchFound Then
            ActiveCell.Value = ComboBox1.Text
            ActiveCell.Offset(, priColumn).Value = ComboBox1.Column(1)
        Else
            ActiveCell.Value = ""
            ActiveCell.Offset(, priColumn).Value = ""
        End If
    End Sub
    
    
    Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        On Error Resume Next
        Select Case KeyCode
        Case 9, 16, 17, 37 To 40
        Case 13
            ActiveCell.Offset(1).Activate
        Case Else
            Dim strValue As String
            strValue = LCase(ComboBox1.Text)
            ComboBox1.ListRows = 20
            If Trim(strValue) > "" Then
                If IsArray(priArray) Then
                    Dim ArrFilter, GetRow()
                    Dim c As Long, i As Long, n As Long, r As Long
                    For r = 1 To UBound(priArray, 1)
                        If LCase(priArray(r, 1)) Like "*" & strValue & "*" Then
                            n = n + 1
                            ReDim Preserve GetRow(1 To n)
                            GetRow(n) = r
                        End If
                    Next
                    If n Then
                        Dim u As Byte
                        u = UBound(priArray, 2)
                        ReDim ArrFilter(1 To n, 1 To u)
                        For r = 1 To n
                            For c = 1 To u
                                ArrFilter(r, c) = priArray(GetRow(r), c)
                            Next
                        Next
                        ComboBox1.List = ArrFilter
                    Else
                        ComboBox1.Clear
                        ComboBox1.ListRows = 0
                    End If
                    ComboBox1.DropDown
                End If
            Else
                If ComboBox1.ListCount <> UBound(priArray) Then
                    ComboBox1.List = priArray
                    ComboBox1.DropDown
                End If
            End If
        End Select
    End Sub
    
    
    Private Sub HienComboBox()
        priIsFocus = True
        With ComboBox1
            .Visible = False
            .Visible = True
            .Left = ActiveCell.Left
            .Top = ActiveCell.Top
            .Width = ActiveCell.Width
            .ListWidth = .Width + ActiveCell.Offset(, priColumn).Width
            .ColumnWidths = .Width - 4
            .Height = ActiveCell.Height
            .List = priArray
            .Text = ""
            .Text = ActiveCell.Value
            .Activate
            .SelStart = 0
            .SelLength = Len(.Text)
        End With
        priIsFocus = False
    End Sub
    
    
    Private Sub AnComboBox()
        With ComboBox1
            If .Visible Then
                .Visible = False
            End If
        End With
    End Sub

  3. #3
    nguyenthanhsd Guest
    Cái này không thể làm được hay sao anh em ơi?

  4. #4
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Hoàng Trọng Nghĩa
    Với sheet2 tại cột B và C, bạn thử chọn 1 ô tại 2 cột đó, từ hàng 3 trở đi sẽ thấy nó.

    Gõ từ khóa chúng sẽ hiện ra tương ứng, không nhất thiết phải gõ từ đầu câu, chỉ cần gõ bất kỳ cụm từ nào trong đó và không phân biệt chữ thường hoặc chữ hoa.

    Ví dụ: Chuỗi là Hoang Trong Nghia, bạn chỉ cần gõ trong (Trong, TRONG, ...), hoặc gõ oang (OANG, oAng, ...) thì những mục có chứa các từ đó sẽ hiển thị để bạn chọn.

    Đây là toàn bộ code của bài này (code trong Module của Sheet2):


    <div class="bbcode_container">
    <div class="bbcode_description">Code:
    </div>
    </div>
    Lâu quá mới thấy anh Nghĩa xuất chiêu, cái này hay quá.

  5. #5
    buidinhsg Guest
    Trích dẫn Gửi bởi giaiphap
    Lâu quá mới thấy anh Nghĩa xuất chiêu, cái này hay quá.
    bạn thử thể hiện sự ngưỡng mộ ấy bằng cách làm cho code trên ảo thêm tí nữa đi .
    thí dụ hiện tại thì không thể dùng các phím mũi tên di chuyển qua lại giữa các ô trong vùng [B:C]
    bạn thử nghĩ cách làm xem sao ? hi hi [IMG]images/smilies/a20.gif[/IMG][IMG]images/smilies/a20.gif[/IMG]

  6. #6
    quahahi Guest
    Trích dẫn Gửi bởi doveandrose
    bạn thử thể hiện sự ngưỡng mộ ấy bằng cách làm cho code trên ảo thêm tí nữa đi .
    thí dụ hiện tại thì không thể dùng các phím mũi tên di chuyển qua lại giữa các ô trong vùng [B:C]
    bạn thử nghĩ cách làm xem sao ? hi hi [IMG]images/smilies/a20.gif[/IMG][IMG]images/smilies/a20.gif[/IMG]
    Bác lại làm khó em hoài, thôi thử đại có gì bác góp ý nghe. Chổ màu đỏ là em mới thêm vào.

    Mã:
    Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
        On Error Resume Next
        If KeyCode = 39 Then
            ActiveCell.Offset(, 1).Activate
            Exit Sub
        ElseIf KeyCode = 37 Then
            ActiveCell.Offset(, -1).Activate
            Exit Sub
        End If
        Select Case KeyCode
        Case 9, 16, 17, 37 To 40
        Case 13
            ActiveCell.Offset(1).Activate
        Case Else
            Dim strValue As String
            strValue = LCase(ComboBox1.Text)
            ComboBox1.ListRows = 20
            If Trim(strValue) > "" Then
                If IsArray(priArray) Then
                    Dim ArrFilter, GetRow()
                    Dim c As Long, i As Long, n As Long, r As Long
                    For r = 1 To UBound(priArray, 1)
                        If LCase(priArray(r, 1)) Like "*" & strValue & "*" Then
                            n = n + 1
                            ReDim Preserve GetRow(1 To n)
                            GetRow(n) = r
                        End If
                    Next
                    If n Then
                        Dim u As Byte
                        u = UBound(priArray, 2)
                        ReDim ArrFilter(1 To n, 1 To u)
                        For r = 1 To n
                            For c = 1 To u
                                ArrFilter(r, c) = priArray(GetRow(r), c)
                            Next
                        Next
                        ComboBox1.List = ArrFilter
                    Else
                        ComboBox1.Clear
                        ComboBox1.ListRows = 0
                    End If
                    ComboBox1.DropDown
                End If
            Else
                If ComboBox1.ListCount <> UBound(priArray) Then
                    ComboBox1.List = priArray
                    ComboBox1.DropDown
                End If
            End If
        End Select
    End Sub

  7. #7
    giangnt Guest
    Trích dẫn Gửi bởi doveandrose
    bạn thử thể hiện sự ngưỡng mộ ấy bằng cách làm cho code trên ảo thêm tí nữa đi .
    thí dụ hiện tại thì không thể dùng các phím mũi tên di chuyển qua lại giữa các ô trong vùng [B:C]
    bạn thử nghĩ cách làm xem sao ? hi hi [IMG]images/smilies/a20.gif[/IMG][IMG]images/smilies/a20.gif[/IMG]
    Chuyện...đơn giản quá với bạn í mà lị. Bạn dove cứ chờ xem...[IMG]images/smilies/a07.gif[/IMG][IMG]images/smilies/a07.gif[/IMG][IMG]images/smilies/a07.gif[/IMG]

  8. #8
    jonnyt240 Guest
    Trích dẫn Gửi bởi hpkhuong
    Chuyện...đơn giản quá với bạn í mà lị. Bạn dove cứ chờ xem...[IMG]images/smilies/a07.gif[/IMG][IMG]images/smilies/a07.gif[/IMG][IMG]images/smilies/a07.gif[/IMG]
    mình sợ nó không đơn giản ấy chứ , nếu anh nào thấy đơn giản thì anh đó giỏi quá rồi [IMG]images/smilies/a43.gif[/IMG][IMG]images/smilies/a43.gif[/IMG]

  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi doveandrose
    mình sợ nó không đơn giản ấy chứ , nếu anh nào thấy đơn giản thì anh đó giỏi quá rồi [IMG]images/smilies/a43.gif[/IMG][IMG]images/smilies/a43.gif[/IMG]
    Hồi trước mình có hỏi làm sao để nhận biết khi nào dropdown cũng vì vấn đề này. Giờ thì mọi sự đã được kiểm soát! Dĩ nhiên là các phím định hướng không đơn giản như phím Enter rồi!

  10. #10
    nguyenhungcase Guest
    Trích dẫn Gửi bởi huuphucpt
    Mình tình cờ đọc được code drop down list của anh Hoàng Trọng Nghĩa, down về thử thấy rất hay, có thể ứng dụng trong công việc của mình, nhưng mình không biết sử dụng nó thế nào, mong anh Nghĩa chỉ dùng, rất cám ơn. Tức là làm sao gán code vào cell tìm kiếm đó. Và gán danh sách tìm nữa.
    Thì bạn gửi cái file bạn lên đây, rồi nói danh sách nào cần chọn, nơi nào cần show ra v.v... thì mình sẽ làm cho. Còn chì từng tí chắc khó có thể diễn giải hết cho bạn hiểu.

Trang 1 của 3 123 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •