Giúp Code rút gọn sự kiện Click khi Userform gồm 50 Checkbox

Liên hệ QC

hondacrv2019

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
19/5/19
Bài viết
116
Được thích
9
Em có 1 form gồm 50 Checkbox em cần miển sao Click vào bất cứ CHeckbox nào thì chạy code , chứ em làm như thế này dài quá
Mã:
Private Sub CheckBox1_Click()
MsgBox ("Thu nghiem")
End Sub

Private Sub CheckBox2_Click()
MsgBox ("Thu nghiem")
End Sub

Private Sub CheckBox3_Click()
MsgBox ("Thu nghiem")
End Sub

'------------
'-------------

Private Sub CheckBox50_Click()
MsgBox ("Thu nghiem")
End Sub

em xin chân thành cảm ơn
 
Thì bạn gộp hết 50 ChexkBox đó lại làm 1 hay 1 vài cái thôi!
 
Upvote 0
Vấn đề này trên diễn đàn đã có trả lời rồi. Chịu khó tìm đi.
(Đại khái là phải dùng Class Module.)

Thắc mắc: với đà này, sáng mai chắc sẽ có câu hỏi về Userform 100 buttons
 
Lần chỉnh sửa cuối:
Upvote 0
Em có 1 form gồm 50 Checkbox em cần miển sao Click vào bất cứ CHeckbox nào thì chạy code , chứ em làm như thế này dài quá
Mã:
Private Sub CheckBox1_Click()
MsgBox ("Thu nghiem")
End Sub

Private Sub CheckBox2_Click()
MsgBox ("Thu nghiem")
End Sub

Private Sub CheckBox3_Click()
MsgBox ("Thu nghiem")
End Sub

'------------
'-------------

Private Sub CheckBox50_Click()
MsgBox ("Thu nghiem")
End Sub

em xin chân thành cảm ơn

Vấn đề của bác với UserForm của VBA em chưa biết giải quyết thế nào.
Với .NET Form thì các sự kiện cùng loại có thể gom chung về cùng 1 Sub với tham số sender sẽ định danh được Control nào sinh ra Event.

Em có làm một ví dụ:
Mã:
Public app As dnAppExcel
Dim frm As dnForm

Sub form_show()
    If app Is Nothing Then Set app = New dnAppExcel
    app.Initialize Application
   
    form_design
    frm.Show
End Sub
Sub form_design()
    Select Case True
        Case (frm Is Nothing), frm.IsDisposed 'goto design
        Case Else:  Exit Sub
    End Select

    '# design
   
    'Khoi tao Form
     Set frm = New dnForm
   
     '# Them 10 CheckBox
     For i = 1 To 10
         With frm.AddCheckBox("CheckBox" & i, "CheckBox " & i, 10, i * 25 - 20) 'Them CheckBox
       
            '# Link su kien CheckedChanged den Sub 'CheckBoxs_CheckedChanged' (phia duoi)
            .regEvent_CheckedChanged ThisWorkbook, "CheckBoxs_CheckedChanged"
         End With
     Next
   
End Sub

Sub CheckBoxs_CheckedChanged(sender As dnCheckBox, e As Object)
    app.MsgBox "B¹n võa Click vµo CheckBox cã tªn lµ '" & sender.Name & "', tr¹ng th¸i Checked=" & sender.Checked, dnMsgBoxStyles_Information
End Sub

multi-checkBoxs.png
 

File đính kèm

Upvote 0
Hãy sử dụng Class Module, và tìm kiếm với từ khóa đó, diễn đàn này cũng có như bài #3 đề cập, hoặc Google English thì còn nhiều nữa (nhẹ nhàng và hiểu hơn dùng các addins phụ trở nào khác)
 
Upvote 0
không gom được bác ơi ở sử kiện Click thì em dùng chung 1 code, còn sự kiện Dbclick thì mỗi nút Check sẽ 1 code riêng không giống nhau

Bạn nên phân tích lại bài toán thiết kế form xem như thế nào. Bạn nghĩ có người dùng nào có thể duyệt qua 50 cái control trên form để chọn mình nên click cai nào không ?
 
Upvote 0
Bạn nên phân tích lại bài toán thiết kế form xem như thế nào. Bạn nghĩ có người dùng nào có thể duyệt qua 50 cái control trên form để chọn mình nên click cai nào không ?

bài toán là thế này . 50 nút bấm đó tương đương 50 số phòng trong khách sạn. Khi check vào nghĩa là phòng đó có khách. Ví dụ khi em check 5 cái (1,2,40,45,50) thì ý em chạy 1 code để nó đếm tổng là mình vừa check 5 phòng. hiện thì mình phải làm sự kiện click từng check thì mình thấy dài quá bạn hiểu không.
 
Upvote 0
bài toán là thế này . 50 nút bấm đó tương đương 50 số phòng trong khách sạn. Khi check vào nghĩa là phòng đó có khách. Ví dụ khi em check 5 cái (1,2,40,45,50) thì ý em chạy 1 code để nó đếm tổng là mình vừa check 5 phòng. hiện thì mình phải làm sự kiện click từng check thì mình thấy dài quá bạn hiểu không.

:) Cũng may 50 phòng chứ 100 phòng thì mệt rồi.
Nếu viết ứng dụng cho khách sạn 30 phòng thì các textbox còn lại để trống?
Nhu cầu là có thông tin nhanh nhất tình trạng phòng, tôi nghĩ bạn nên:
- Chia thành từng tầng để số textbox dùng ít đi. (Nếu muốn hiển thị như các ứng dụng quản lý quán ăn, nhà hàng)
- Dùng toàn bộ là Label và nhập liệu số phòng (nhận, trả) thông qua 1 textbox thôi. Form dùng label chỉ để hiển thị hiện trạng phòng, không cần thao tác gì trên nó. Dùng Label sẽ giảm tải cho Form khỏi phải load các thuộc tính không cần thiết.
- Hoặc dùng lưới dữ liệu như listbox để hiển thị tình trạng phòng
- Hoặc dùng Listbox hiển thị những phòng nào còn trống.

Nói thêm: nếu bạn nói rõ bài toán này trước đó thì mọi người sẽ có hướng dẫn code cho bạn đúng hướng hơn rồi.
Chỉ nói riêng nghiệp vụ check 5 phòng như bạn nói cũng có cách khác là: Nhập dữ liệu chung vào 1 textbox các số phòng có khách, cách nhau dấu phẩy rồi bấm nút lệnh, nó tự gán check=true cho mấy phòng đó, đỡ phải mất thời gian cuộn chuột, di chuyển chuột click chọn từng textbox.
 
Lần chỉnh sửa cuối:
Upvote 0
...
Nói thêm: nếu bạn nói rõ bài toán này trước đó thì mọi người sẽ có hướng dẫn code cho bạn đúng hướng hơn rồi.
Chỉ nói riêng nghiệp vụ check 5 phòng như bạn nói cũng có cách khác là: Nhập dữ liệu chung vào 1 textbox các số phòng có khách, cách nhau dấu phẩy rồi bấm nút lệnh, nó tự gán check=true cho mấy phòng đó, đỡ phải mất thời gian cuộn chuột, di chuyển chuột click chọn từng textbox.
Ủa bạn ngây thơ vậy sao? Cái vụ này có lẽ "ai cũng hiểu chỉ một người không hiểu"

Thiết kế này là đồ bản quyền. Do bộ óc siêu việt của thớt lập ra.
Người ta lên đây hỏi code thì bạn chỉ biết viết code thì viết giùm thôi. Không nên bàn gì thêm, và tuyệt đối là đừng hỏi về file hay thiết kế.
 
Upvote 0
Web KT

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

Back
Top Bottom