Tạo Userform nhập liệu sử dụng combobox nhiều điều kiện

Liên hệ QC

luuhonghai

Thành viên mới
Tham gia
1/2/17
Bài viết
32
Được thích
4
Em xin phép được hỏi các anh/chị và các thầy trong diễn đàn ạ.
Em cần tạo ra một file dữ liệu mà các trường thông tin được nhập qua Userform. Trong Userform sẽ có các combobox1,2,3,... được ràng buộc lẫn nhau. VD:
1.
Combobox1 bao gồm:
- A
- B
- C
-...
Nếu chọn A ở Combobox1 thì:
- Combobox2 chỉ có thể chọn: 1, 3, 5, 7, 9...
+ Combobox2.1 chỉ có thể chọn: V1, V3, V5
- Combobox3 chỉ có thể chọn: Toán, Lý, Hoá.
Nếu chọn B ở Combobox1 thì:
- Combobox2 chỉ có thể chọn: 2, 4, 6, 8, 10...
+ Combobox2.1 chỉ có thể chọn: V2, V4, V6
- Combobox3 chỉ có thể chọn: Văn, Sử, Địa.
...
Chi tiết em có diễn giải tại Sheet Ketqua và Userform trong file đính kèm. Em rất mong nhận được sự giúp đỡ của các anh/chị và các thầy. Em xin cảm ơn!
 

File đính kèm

  • NHAP LIEU.xlsm
    20.8 KB · Đọc: 16
Xin các bạn xem file bài kế tiếp & chúc vui nhân dịp xuân về
 
Lần chỉnh sửa cuối:
Upvote 0
Tạm là vầy & vài tiếng sau mình sẽ gỡ file trên
 

File đính kèm

  • Form.rar
    29 KB · Đọc: 34
Upvote 0
1. Còn thiếu. Thế nếu chọn C hoặc D thì trong ComboBox2.1 nhập gì?
Trong vùng dữ liệu Q1:T14 tôi giả thiết là khi chọn C thì nhập S10:S13 vào ComboBox2.1, còn nếu chọn D thì nhập T10:T14. Tự sửa lại.

2. Nếu thêm bớt dữ liệu thì vẫn phải giữ cấu trúc như hiện thời ở Q1:T14 (mỗi dải mầu là dữ liệu cho 1 ComboBox). Và nhớ sửa địa chỉ các vùng trong mảng dulieu (trong UserForm_Initialize)

3. Toàn bộ code trong module UserForm1. Đọc các chú thích để hiểu và biết cách làm.
 

File đính kèm

  • NHAP LIEU.xlsm
    27.3 KB · Đọc: 25
Upvote 0
1. Còn thiếu. Thế nếu chọn C hoặc D thì trong ComboBox2.1 nhập gì?
Trong vùng dữ liệu Q1:T14 tôi giả thiết là khi chọn C thì nhập S10:S13 vào ComboBox2.1, còn nếu chọn D thì nhập T10:T14. Tự sửa lại.

2. Nếu thêm bớt dữ liệu thì vẫn phải giữ cấu trúc như hiện thời ở Q1:T14 (mỗi dải mầu là dữ liệu cho 1 ComboBox). Và nhớ sửa địa chỉ các vùng trong mảng dulieu (trong UserForm_Initialize)

3. Toàn bộ code trong module UserForm1. Đọc các chú thích để hiểu và biết cách làm.
Em cảm ơn anh rất nhiều vì đã giúp em bổ xung yêu cầu chặt chẽ hơn ạ. Em muốn hỏi thêm một chút ạ, em muốn thêm 1 số ràng buộc như sau:
1. Ô mã HS bắt buộc phải nhập dạng số, đủ 8 ký tự => nếu nhập sai => thông báo Msgbox "Chưa nhập đúng mã HS"
2. Đối với các Combobox chỉ cho phép chọn, không được gõ vào.
3. Nếu ấn nút "Huỷ" sau khi nhập thì sẽ xoá hết các kết quả vừa nhập trước đó để nhập lại từ đầu.
4. Thêm cột ngày nhập liệu trong Bảng kết quả, được điền vào bằng cách nhập ngày vào Textbox trong Userform. Cái em mong muốn nhất đó là Textbox "ngày nhập liệu" được chọn bằng Calendar (Datepicker) và không tự gõ được ạ.
Em cảm ơn anh rất nhiều!
Bài đã được tự động gộp:

Thế thì tôi xin lỗi vì chắc làm khác ý.
Dạ không. File của anh còn giúp em fix lại yêu cầu chặt chẽ hơn ạ.
 

File đính kèm

  • NHAP LIEU_loigiai.xlsm
    25.7 KB · Đọc: 28
Upvote 0
Em cảm ơn anh rất nhiều vì đã giúp em bổ xung yêu cầu chặt chẽ hơn ạ. Em muốn hỏi thêm một chút ạ, em muốn thêm 1 số ràng buộc như sau:
Bạn ạ, 2 code ở bài #3 và #4 loại trừ lẫn nhau. Không thể cả 2 đều đúng.

Tôi làm sao cho vd. chọn A trong ComboBox1 thì ở ComboBox2 sẽ có 1, 3, 5, 7, Chưa phân, ở ComboBox4 sẽ có Toán, Lý, Hóa. Nếu trong ComboBox2 tôi chọn Chưa phân thì ComboBox3 sẽ rỗng, còn nếu chọn mục khác thì ComboBox3 sẽ có danh sách.

Trong bài #3 nếu bạn chọn A thì trong ComboBox2 có Toán, Lí, Hoá chứ không phải là 1, 3, 5, 7, Chưa phân, còn trong ComboBox4 lại không có danh sách. Bạn sẽ chọn Khối ở đâu vậy?

Nếu bài #3 bạn cho là đạt yêu cầu thì ắt bài #4 phải không đạt yêu cầu.

Nếu trên cơ sở bài #3 mà bạn tự làm được, trích
Dạ em cảm ơn anh rất nhiều. Em đã làm được ạ.
thì những cái bạn hỏi thêm nó là cái gì to tát đâu mà bạn phải đi hỏi?

Rất tiếc là tôi đã bỏ thời gian cho bạn. Làm được và không làm được cuối cùng là như nhau.

Tôi dừng ở đây. Chấm hết.
 
Upvote 0
Bạn ạ, 2 code ở bài #3 và #4 loại trừ lẫn nhau. Không thể cả 2 đều đúng.

Tôi làm sao cho vd. chọn A trong ComboBox1 thì ở ComboBox2 sẽ có 1, 3, 5, 7, Chưa phân, ở ComboBox4 sẽ có Toán, Lý, Hóa. Nếu trong ComboBox2 tôi chọn Chưa phân thì ComboBox3 sẽ rỗng, còn nếu chọn mục khác thì ComboBox3 sẽ có danh sách.

Trong bài #3 nếu bạn chọn A thì trong ComboBox2 có Toán, Lí, Hoá chứ không phải là 1, 3, 5, 7, Chưa phân, còn trong ComboBox4 lại không có danh sách. Bạn sẽ chọn Khối ở đâu vậy?

Nếu bài #3 bạn cho là đạt yêu cầu thì ắt bài #4 phải không đạt yêu cầu.

Rất tiếc là tôi đã bỏ thời gian cho bạn.

Tôi dừng ở đây.
Dạ không. Vậy em viết k được rõ r ạ. Em cảm ơn anh SA_DQ vì đã giúp đỡ em và "Em đã làm được" là chính xác bằng file của anh ạ. Vậy nên khi mở rộng yêu cầu em mới sử dụng trên file của anh đấy ạ.
 
Upvote 0
. . . . . , em muốn thêm 1 số ràng buộc như sau:
1. Ô mã HS bắt buộc phải nhập dạng số, đủ 8 ký tự => nếu nhập sai => thông báo Msgbox "Chưa nhập đúng mã HS"
2. Đối với các Combobox chỉ cho phép chọn, không được gõ vào.
3. Nếu ấn nút "Huỷ" sau khi nhập thì sẽ xoá hết các kết quả vừa nhập trước đó để nhập lại từ đầu.
4. Thêm cột ngày nhập liệu trong Bảng kết quả, được điền vào bằng cách nhập ngày vào Textbox trong Userform. Cái em mong muốn nhất đó là Textbox "ngày nhập liệu" được chọn bằng Calendar (Datepicker) và không tự gõ được ạ.
1./ Nếu mã là 8 kí số thì nên bắt đầu bỡi 10 000 000; Theo mình trong Excel, mã nên có ký tự

2./ Có khi gõ vào nhanh hơn chọn thì sao? Còn chuyện chỉ được chọn thì ăn thua ở nguồn của ComboBox

3./ Chuyện xóa hết các kết quả vừa nhập có thể làm được nếu có trường [Ngày-tháng] (để xóa các dòng dữ liệu của ngày vừa nhập)

4./ Ngày nhập liệu muốn lấy từ lịch thì tốn tài nguyên thêm; Còn nhập từ ComboBox ta có thể chỉ cho nhập ngày nào tùy thuộc vào nguồn (dữ liệu) cho ComboBox

[Ghi chú thêm] Tất cả các nội dung của mình trong các bài chỉ nhằm bạn tham khảo & có xu hướng hay mô hình để bạn tự hoàn chỉnh theo thự tế công việc của bạn.
 
Upvote 0
1./ Nếu mã là 8 kí số thì nên bắt đầu bỡi 10 000 000; Theo mình trong Excel, mã nên có ký tự

2./ Có khi gõ vào nhanh hơn chọn thì sao? Còn chuyện chỉ được chọn thì ăn thua ở nguồn của ComboBox

3./ Chuyện xóa hết các kết quả vừa nhập có thể làm được nếu có trường [Ngày-tháng] (để xóa các dòng dữ liệu của ngày vừa nhập)

4./ Ngày nhập liệu muốn lấy từ lịch thì tốn tài nguyên thêm; Còn nhập từ ComboBox ta có thể chỉ cho nhập ngày nào tùy thuộc vào nguồn (dữ liệu) cho ComboBox

[Ghi chú thêm] Tất cả các nội dung của mình trong các bài chỉ nhằm bạn tham khảo & có xu hướng hay mô hình để bạn tự hoàn chỉnh theo thự tế công việc của bạn.
Vâng. Em hiểu ạ. Em cảm ơn anh.
Bài đã được tự động gộp:

1./ Nếu mã là 8 kí số thì nên bắt đầu bỡi 10 000 000; Theo mình trong Excel, mã nên có ký tự

2./ Có khi gõ vào nhanh hơn chọn thì sao? Còn chuyện chỉ được chọn thì ăn thua ở nguồn của ComboBox

3./ Chuyện xóa hết các kết quả vừa nhập có thể làm được nếu có trường [Ngày-tháng] (để xóa các dòng dữ liệu của ngày vừa nhập)

4./ Ngày nhập liệu muốn lấy từ lịch thì tốn tài nguyên thêm; Còn nhập từ ComboBox ta có thể chỉ cho nhập ngày nào tùy thuộc vào nguồn (dữ liệu) cho ComboBox

[Ghi chú thêm] Tất cả các nội dung của mình trong các bài chỉ nhằm bạn tham khảo & có xu hướng hay mô hình để bạn tự hoàn chỉnh theo thự tế công việc của bạn.
2. Cái này là em muốn xoá các trường vừa nhập trong textbox và combobox trước đó chứ k phải trên bảng kết quả ạ. Vì trước khi ấn “lưu” thì các kết quả sẽ k add vào Bảng kết quả trên excel ạ
 
Upvote 0
Cái này là em muốn xoá các trường vừa nhập trong textbox và combobox trước đó chứ k phải trên bảng kết quả ạ. Vì trước khi ấn “lưu” thì các kết quả sẽ k add vào Bảng kết quả trên excel ạ
a./ Trong các TextBox thì bạn tùy tiện & xóa vô tư;
b./ Trong các ComboBox thì muốn xóa ta phải có mẹo nhỏ: Dữ liệu nguồn của ComboBox cần chứa chí ít 1 dòng trống (trắng)
Sau khi chạy gần hết macro thì ta gán Space(0) cho các ComboBox. Đây là cách của mình, hơi thô nhưng tiện (cho mình)
ví dụ:
PHP:
Private Sub CmdLuu_Click()
 Dim Rws As Long
 Dim MyTxt As String
 If Me!tbMa.Text = "" Then
    MyTxt = "Mã HS":                            Me!tbMa.Text = "GPE.COM"
 ElseIf Me!tbHT.Text = "" Then
    MyTxt = "Ho & Tên HS":                      Me!tbHT.Text = "GPE.COM"
 Else
 End If
 If MyTxt = "" Then
    With Sheets("KetQua")
        Rws = .[A2].End(xlDown).Row + 1
        .Cells(Rws, "A").Value = Me!tbMa.Text:  Me!tbMa.Text = Space(0)
        .Cells(Rws, "b").Value = Me!tbHT.Text:  Me!tbHT.Text = Space(0)
        .Cells(Rws, "C").Value = Me!CB01.Text:  Me!CB01.Text = Space(0)
        .Cells(Rws, "d").Value = Me!CB02.Text:  Me!CB02.Text = ""
        .Cells(Rws, "e").Value = Me!CB03.Text:  Me!CB03.Text = ""
    End With
    MsgBox "Xong Ròi!", , "GPE.COM Xin Chào!"
 Else
    MsgBox MyTxt, , "Cân Nhâp":                 Exit Sub
 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