Tạo danh sách theo điều kiện cho Combobox

Liên hệ QC

killitmore

Thành viên hoạt động
Tham gia
8/12/14
Bài viết
165
Được thích
72
Mô tả file:
+ Tại sheet ISSUING em muốn lập 1 user-form để người dùng có thể nhập hóa đơn vào (bấm vào chữ Press here to issue a bill để hiện User-form). Form nhập liệu này là để nhập dữ liệu cho bảng gồm 16 cột phía dưới. 6 cột đầu chung cho toàn bộ hóa đơn còn 10 cột còn lại ứng với mỗi item được liệt kê trong hóa đơn. Form này được lập ra nhằm giúp người dùng ko phải nhập dữ liệu chung cho các item trong cùng 1 hóa đơn (dữ liệu ở 6 cột đầu chỉ cần nhập 1 lần trong user-form rồi tự động được điền hoàn thiện vào bảng bên dưới cho mỗi item)

+ Hiện tại form có 2 combobox ứng với thông tin ở cột D và E.(ngoài nút Save ra thì tất cả các textbox, combobox, label đều được tạo bằng code chứ ko phải vẽ tay). Combobox thứ nhất lấy dữ liệu từ vùng đặt tên là "LOCATION". Em muốn danh sách của combobox thứ 2 chạy tự động theo giá trị được chọn tại combobox thứ nhất (như kiểu Indirect trong Excel)

Mong các cao thủ chỉ giáo -\\/.
 

File đính kèm

  • STORE REC ISSU DATA T23 Rev6.xlsm
    479.3 KB · Đọc: 57
Lần chỉnh sửa cuối:
Bạn quăng cái file lên mà không cần diễn tả cho người khác biết 2 combobox chứa giá trị nào ? lấy từ đâu ?
Cho nên tôi có hiểu sai thì bạn ráng chịu nhé

Trước hết bạn tạo 1 Class Module (không phải Module) và đặt tên là hellCbx

chèn vài dòng vào Class Module hellCbx

Mã:
Public WithEvents eCbx As MSForms.combobox
Public cbx_Sub_Location As MSForms.combobox


Private Sub eCbx_Change()
cbx_Sub_Location.RowSource = Replace(eCbx.Text, " ", "_")
End Sub

quay lại cái Form

chèn dòng đầu tiên trong code của Form ( khai báo biến toàn cục)
Mã:
Private cbx_instance As hellCbx

chèn thêm 3 dòng sau khi khai báo Combobox Index 5 của sub Form_initialize
Mã:
[COLOR=#ff0000]indirectname = Replace(Me.Controls(settings(4)).Text, " ", "_")[/COLOR]
[COLOR=#ff0000]                .RowSource = indirectname[/COLOR]
[COLOR=#ff0000]                currentTopPos = .Top + .Height + UI_GAP[/COLOR]
[COLOR=#ff0000]            End With[/COLOR]
            
            Set cbx_instance = New hellCbx
            Set cbx_instance.eCbx = Me.Controls(settings(4))
            Set cbx_instance.cbx_Sub_Location = Me.Controls(settings(5))

phần màu đỏ có rồi , chỉ thêm phần màu đen
 
Upvote 0
Cảm ơn anh @doveandrose đã giúp đỡ và góp ý. Code của anh chạy đúng như em cần rồi ạ, em cũng sửa lại bài viết, mô tả lại file theo góp ý của anh rùi --=0
 
Upvote 0
Anh cho em hỏi thêm 1 chút là trong File của em, em còn cần tạo thêm nhiều cặp combobox như vậy, số lượng cặp combobox đó lại phụ thuộc vào Input của Input box ban đầu (Enter the number of Items in invoice) thì làm thế để tạo được nhiều instance của class hellCbx ạ (số lượng instance phụ thuộc vào kết quả của Input box kia)
 
Upvote 0
Anh cho em hỏi thêm 1 chút là trong File của em, em còn cần tạo thêm nhiều cặp combobox như vậy, số lượng cặp combobox đó lại phụ thuộc vào Input của Input box ban đầu (Enter the number of Items in invoice) thì làm thế để tạo được nhiều instance của class hellCbx ạ (số lượng instance phụ thuộc vào kết quả của Input box kia)

biến toàn cục phải là 1 collection kiểu như
Mã:
Private hell_collection As New Collection
bây giờ kéo cái cbx_instance xuống thành biến nội bộ trong hàm Form_initialize thôi
mỗi lần tạo 1 cặp combobox thì thêm mới 1 new hellCbx kiểu như
Mã:
Set cbx_instance = New hellCbx
            hell_collection.Add cbx_instance
            Set cbx_instance.eCbx = Me.Controls[COLOR=#ff0000](settings(4))[/COLOR]
            Set cbx_instance.cbx_Sub_Location = Me.Controls([COLOR=#ff0000]settings(5)[/COLOR])

đại khái là vậy , khi thêm nhiều Combobox thì mấy chỗ màu đỏ có thể sẽ khác , tùy vào sự tỉnh táo của bạn
 
Upvote 0
Anh cho em hỏi thêm 1 chút là trong File của em, em còn cần tạo thêm nhiều cặp combobox như vậy, số lượng cặp combobox đó lại phụ thuộc vào Input của Input box ban đầu (Enter the number of Items in invoice) thì làm thế để tạo được nhiều instance của class hellCbx ạ (số lượng instance phụ thuộc vào kết quả của Input box kia)
Tôi nghĩ bạn không nên làm theo hướng này. Nếu có nhiều item thì form của bạn có rất nhiều control, khi nhập liệu sẽ rất rối. Bạn xem cách làm trong file đính kèm, nếu thấy hợp lý thì áp dụng.
 

File đính kèm

  • STORE REC ISSU DATA T23 Rev6.rar
    339.7 KB · Đọc: 67
Upvote 0
Tôi nghĩ bạn không nên làm theo hướng này. Nếu có nhiều item thì form của bạn có rất nhiều control, khi nhập liệu sẽ rất rối. Bạn xem cách làm trong file đính kèm, nếu thấy hợp lý thì áp dụng.
Cảm ơn bác đã quan tâm ạ, lúc đầu em cũng định làm theo cách bác chỉ cơ mà 1 hóa đơn lắm items quá cứ bấm nhập đi nhập lai nhiều thông tin trùng lặp thì ngại nên mới cố làm theo cách phức tạp kia. Nhờ bác doveandrose giúp đỡ em đã hoàn thành được Form theo đúng ý mình rùi ạ }}}}} mất nguyên buổi tối hôm qua ;;;;;;;;;;;

Xin cảm ơn 2 cao thủ huuthang_bddoveandrose đã giúp em}}}}}
 
Upvote 0
Cảm ơn bác đã quan tâm ạ, lúc đầu em cũng định làm theo cách bác chỉ cơ mà 1 hóa đơn lắm items quá cứ bấm nhập đi nhập lai nhiều thông tin trùng lặp thì ngại nên mới cố làm theo cách phức tạp kia. Nhờ bác doveandrose giúp đỡ em đã hoàn thành được Form theo đúng ý mình rùi ạ }}}}} mất nguyên buổi tối hôm qua ;;;;;;;;;;;

Xin cảm ơn 2 cao thủ huuthang_bddoveandrose đã giúp em}}}}}

Chắc bạn chưa thử file bài #6 nhỉ. Chả có thông tin trùng lặp nào phải nhập lại cả.
 
Upvote 0
Chắc bạn chưa thử file bài #6 nhỉ. Chả có thông tin trùng lặp nào phải nhập lại cả.
Aw rất xin lỗi huynh, lúc chiều đệ có thử rồi nhưng lẩm cẩm nên ko để ý kỹ, ý tưởng của bác đúng là hợp lý hơn thật --=0
Em sẽ ngâm cứu tiếp theo hướng này, cảm ơn bác đã nhắc nhở -=.,,
 
Upvote 0
minh mới tham gia diễn đàn minh không biết đang như thế nào.tiện ở đây cho minh hỏi active cell a1:b5 khi nhấn chuột vào đó thi active ve o D1 chẳng hạn,xin giúp minh đoạn code làm như thế nào
 
Upvote 0
Mã:
Activesheet.Range("D1").Select
 
Upvote 0
Web KT
Back
Top Bottom