Nhập mã hàng để tìm tên hàng đúng và gần đúng? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Đặng Chi Mai

Thành viên mới
Tham gia
20/6/16
Bài viết
18
Được thích
0
Chào cả nhà! Em muốn nhờ mọi người viết cho em 1 đoan code cho nút combobox trên Form để tìm kiếm dữ liệu đúng và gần đúng. Nếu nó tìm không thấy thì nó không hiện ra list danh sách chọn nữa!
(Nhập vào ký tự gợi nhớ)
Câu hỏi cụ thể ở file đính kèm
 

File đính kèm

Lần chỉnh sửa cuối:
Các A/C ơi, thực tế chúng ta không thiết lập code được cho trường hợp này sao ạ?
 
Upvote 0
mục đích của việc này là gì ? nếu để ghi dữ liệu lên sheet sao không làm Combobox trực tiếp trên sheet , mà lại làm Userform vậy ?
 
Upvote 0
Vì lý do:
- Số lượng hàng có rất nhiều và không thể nhớ hết.
- Trên Form còn phải nhập các thông tin khác nữa.
- Nếu làm trên sheet excel thì cái này mình làm ok rùi.

Vậy nhờ bạn xem và giúp mình nhé!
 
Upvote 0
Vì lý do:
- Số lượng hàng có rất nhiều và không thể nhớ hết.
- Trên Form còn phải nhập các thông tin khác nữa.
- Nếu làm trên sheet excel thì cái này mình làm ok rùi.

Vậy nhờ bạn xem và giúp mình nhé!

vậy thì mình không làm đâu . Trên Form còn các thông tin khác nữa mà bạn đưa cái file như thế , mình làm xong rồi bạn không áp dụng được vào Form thật , rồi lại phải sửa code . Hoặc tôi làm trên file thật hoặc bạn chờ các thành viên khác . Vậy nhé .
 
Upvote 0
Tại mình chỉ mắc mỗi chỗ này thui mà? Mình không nghĩ code viết để thực hiện việc này lại liên quan đến cái khác? Và mình cũng không nghĩ là đưa các câu hỏi lên đây lại phải được những bài thật của mình (ý mình là những bài liên quan đến số liệu thật - nếu như có tính bảo mật)? Mục đính của diễn đàn là để trao đổi và giúp đỡ. Và nếu bạn không thiện cảm (không muốn) thì không sao ạ!
Cám ơn bạn đã chia sẻ!
 
Upvote 0
Mục đính của diễn đàn là để trao đổi và giúp đỡ. Và nếu bạn không thiện cảm (không muốn) thì không sao ạ!
Cám ơn bạn đã chia sẻ!

tôi không nghĩ những câu ở trên có liên quan gì đến chuyện có thiện cảm hay chăng ? tôi muốn tránh trước cho cả người hỏi và người góp ý khỏi đi vào vòng luẩn quẩn : hỏi không rõ ràng -> viết code -> không áp dụng được -> sửa -> hỏi
Nhưng để tránh gây hiểu lầm không đáng có tôi góp ý vài chỗ :
Muốn tạo List động cho combobox như bài này thì không được phép xài thuộc tính Rowsource . Dòng này phải bỏ
Mã:
.ComboBox1.RowSource = "vung"

tạo sự kiện Key_up cho combobox đơn giản như sau

Mã:
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim arr, r As Long, dArr, n As Long
arr = Sheet2.Range("A3:D" & Sheet2.[A65000].End(xlUp).Row).Value
ReDim dArr(1 To 3, 1 To 1)
For r = 1 To UBound(arr) Step 1
    If InStr(arr(r, 1), ComboBox1.Text) > 0 Then
        n = n + 1
        ReDim Preserve dArr(1 To 3, 1 To n)
        dArr(1, n) = arr(r, 1)
        dArr(2, n) = arr(r, 2)
        dArr(3, n) = arr(r, 3)
    End If
Next


If n > 0 Then ComboBox1.Column = dArr Else ComboBox1.List = Array()
ComboBox1.DropDown
End Sub
 
Upvote 0
Chẳng lẽ không có giải pháp nào sao ạ!!

Do nội dung bạn nêu chưa được rõ ràng nên chẳng ai hiểu để mà giúp hoặc hiểu mà lơ tơ mơ nếu giúp thì lãng phí công sức vô ích.

Góp ý chi bạn:

1/ Bạn phải nêu tất tần tật cái bạn muốn làm cái gì với Form đó, ví dụ: Sau khi tìm xong thì phài thêm, sửa, xóa cái gì, nhập liệu vào đâu, để các thành viên nắm được những cái chung mà giúp (còn hỏi như bạn chắc phải giúp dài dài), vì mỗi lần thay đổi nội dung hoặc tiêu đề cột thì coi như phá sản.

2/ Sheet2 dùng theo dõi cái gì thì phải có tiêu đề đầy đủ, rõ ràng (giống như File bạn đang theo dõi, nhằm tránh những cái phát sinh không đáng có.

3/ Bạn phải tự thiết kế cái Form theo nhu cầu cho đầy đủ trước khi hỏi.
 
Upvote 0
tôi không nghĩ những câu ở trên có liên quan gì đến chuyện có thiện cảm hay chăng ? tôi muốn tránh trước cho cả người hỏi và người góp ý khỏi đi vào vòng luẩn quẩn : hỏi không rõ ràng -> viết code -> không áp dụng được -> sửa -> hỏi
Nhưng để tránh gây hiểu lầm không đáng có tôi góp ý vài chỗ :
Muốn tạo List động cho combobox như bài này thì không được phép xài thuộc tính Rowsource . Dòng này phải bỏ
Mã:
.ComboBox1.RowSource = "vung"

tạo sự kiện Key_up cho combobox đơn giản như sau

Mã:
Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim arr, r As Long, dArr, n As Long
arr = Sheet2.Range("A3:D" & Sheet2.[A65000].End(xlUp).Row).Value
ReDim dArr(1 To 3, 1 To 1)
For r = 1 To UBound(arr) Step 1
    If InStr(arr(r, 1), ComboBox1.Text) > 0 Then
        n = n + 1
        ReDim Preserve dArr(1 To 3, 1 To n)
        dArr(1, n) = arr(r, 1)
        dArr(2, n) = arr(r, 2)
        dArr(3, n) = arr(r, 3)
    End If
Next


If n > 0 Then ComboBox1.Column = dArr Else ComboBox1.List = Array()
ComboBox1.DropDown
End Sub

Cám ơn bạn nhiều!
Mình đã đưa code vào combobox và mình thấy:
- Khi nào mã hàng vào nó không hiện ngay mà nhấn phím Backspace rùi nhập mới mới hiện ra.
- Khi nhập từ khóa tìm kiếm xong nhưng vì không muốn chọn mã đó mà chọn lại mã khác thì xóa không xóa được.
Bạn kiểm tra lại cho mình nhé!
 
Upvote 0
Đây là file mà mình đã đưa code của bạn doveandrose. Vì Sheet 2 mình không dùng nên mình đã bỏ cho gọn rùi ạ!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn nhiều!
Mình đã đưa code vào combobox và mình thấy:
- Khi nào mã hàng vào nó không hiện ngay mà nhấn phím Backspace rùi nhập mới mới hiện ra.
- Khi nhập từ khóa tìm kiếm xong nhưng vì không muốn chọn mã đó mà chọn lại mã khác thì xóa không xóa được.
Bạn kiểm tra lại cho mình nhé!

trên máy tôi không thấy có hiện tượng nào như bạn nói cả , combobox text chỉ giống như textbox bình thường , lý do nào không xóa được . Tôi viết code cho mọi người tải file #1 và chép code vào combobox đều có thể thấy code chạy như thế nào , chứ tôi chả giấu diếm dòng nào , có chăng là file của bạn khác xa so với bài #1 mới ra nông nỗi . Điều này thì đã được cảnh báo trước , và đến đây thì không còn cơ hội giao lưu giữa tôi và bạn nữa .
 
Upvote 0
trên máy tôi không thấy có hiện tượng nào như bạn nói cả , combobox text chỉ giống như textbox bình thường , lý do nào không xóa được . Tôi viết code cho mọi người tải file #1 và chép code vào combobox đều có thể thấy code chạy như thế nào , chứ tôi chả giấu diếm dòng nào , có chăng là file của bạn khác xa so với bài #1 mới ra nông nỗi . Điều này thì đã được cảnh báo trước , và đến đây thì không còn cơ hội giao lưu giữa tôi và bạn nữa .

nóng thế anh bạn..........hihihihi
 
Upvote 0
trên máy tôi không thấy có hiện tượng nào như bạn nói cả , combobox text chỉ giống như textbox bình thường , lý do nào không xóa được . Tôi viết code cho mọi người tải file #1 và chép code vào combobox đều có thể thấy code chạy như thế nào , chứ tôi chả giấu diếm dòng nào , có chăng là file của bạn khác xa so với bài #1 mới ra nông nỗi . Điều này thì đã được cảnh báo trước , và đến đây thì không còn cơ hội giao lưu giữa tôi và bạn nữa .
[video]https://youtu.be/zyTVpRSBwkY[/video]
Bạn xem nhé!
 
Upvote 0
[video]https://youtu.be/zyTVpRSBwkY[/video]
Bạn xem nhé!

về điều 1 : trong video bạn ghi chữ thường , còn mã hàng của bạn là chữ IN HOA cơ mà , sao nó tìm thấy ?
đoạn code ở trên bạn thử tìm hiểu trên mạng xem có cách nào dùng hàm Instr so sánh không phân biệt hoa - thường không ?

về điều 2 : thiết lập Combobox là do bạn , không liên quan đến tôi . Combobox của bạn không xóa được là do thiết lập

Mã:
MatchEntry
ở trong Combobox . Bạn phải set giá trị frmMathEntryNone thì mới sửa được

Đấy là những kĩ năng cơ bản nhất khi sử dụng Form , mà bạn thì muốn tôi ghi code demo cho bạn tham khảo , rốt cục bạn không áp dụng được , và tất cả nghĩ rằng là do tôi viết code sai ....
 
Upvote 0
về điều 1 : trong video bạn ghi chữ thường , còn mã hàng của bạn là chữ IN HOA cơ mà , sao nó tìm thấy ?
đoạn code ở trên bạn thử tìm hiểu trên mạng xem có cách nào dùng hàm Instr so sánh không phân biệt hoa - thường không ?

về điều 2 : thiết lập Combobox là do bạn , không liên quan đến tôi . Combobox của bạn không xóa được là do thiết lập

Mã:
MatchEntry
ở trong Combobox . Bạn phải set giá trị frmMathEntryNone thì mới sửa được

Đấy là những kĩ năng cơ bản nhất khi sử dụng Form , mà bạn thì muốn tôi ghi code demo cho bạn tham khảo , rốt cục bạn không áp dụng được , và tất cả nghĩ rằng là do tôi viết code sai ....

Cám ơn bạn nhiều! Mình đã làm ok rùi.
Mã:
Private Sub UserForm_Initialize()
    UserForm1.ComboBox1.MatchEntry = fmMatchEntryNone
End Sub
 
Upvote 0
Thêm 1 cái form đi đường vòng cho vui cửa nhà
 

File đính kèm

Upvote 0
@doveandrose: Giờ mình mới để ý: Khi nhập mã vào rùi và di chuyển con trỏ xuống dưới để chọn mã hàng ưng ý thì chỉ có chọn được mã của dòng đầu tiền thui. Nếu muốn chọn dòng khác phải dùng đến chuột. Vậy có cách nào xử lý được việc này không ạ?
 
Upvote 0
@doveandrose: Giờ mình mới để ý: Khi nhập mã vào rùi và di chuyển con trỏ xuống dưới để chọn mã hàng ưng ý thì chỉ có chọn được mã của dòng đầu tiền thui. Nếu muốn chọn dòng khác phải dùng đến chuột. Vậy có cách nào xử lý được việc này không ạ?

Chuyện này cũng không có gì khó , tôi cũng biết trước sẽ có câu hỏi này . Nhưng giờ bạn phải chờ thành viên khác rồi . Chào bạn .
 
Upvote 0
Đây là file mà mình đã đưa code của bạn doveandrose. Vì Sheet 2 mình không dùng nên mình đã bỏ cho gọn rùi ạ!
Bạn thử thay code trong Form của bạn thành code này xem sao.
Mã:
Option Explicit


Private Sub CommandButton1_Click()
    Unload UserForm1
End Sub


Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 40 Or KeyCode = 38 Then Exit Sub
    If KeyCode = 13 Then
        Me.CommandButton1.SetFocus
        Exit Sub
    End If
        AddData
        ComboBox1.DropDown
End Sub
Private Sub UserForm_Initialize()
    UserForm1.ComboBox1.MatchEntry = fmMatchEntryNone
    AddData
End Sub


Public Sub AddData()
    Dim arr, r As Long, dArr, n As Long
    arr = S1.Range("A2:D" & S1.[A65000].End(xlUp).Row).Value
    ReDim dArr(1 To 3, 1 To 1)
    For r = 1 To UBound(arr) Step 1
        If InStr(LCase(arr(r, 1)), LCase(ComboBox1.Text)) > 0 Then
            n = n + 1
            ReDim Preserve dArr(1 To 3, 1 To n)
            dArr(1, n) = arr(r, 1)
            dArr(2, n) = arr(r, 2)
            dArr(3, n) = arr(r, 3)
        End If
    Next
    If n > 0 Then
        ComboBox1.Column = dArr
    Else
        ComboBox1.List = Array()
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom