Vba 在满足特定限制后禁用组合框

Vba 在满足特定限制后禁用组合框,vba,Vba,我有4个组合框,称为: cboOption1 cboOption2 cboOption3 cboOption4 它们中的每一个都可以有两个值中的一个,10点或20点,由用户从下拉列表中选择。但是,用户只能在所有下拉列表中选择最多40个点,此后将禁用其余的下拉列表 例如1 cboOption1 = 20 cboOption2 = 20 然后 例2 cboOption1 = 10 cboOption2 = 20 cboOption3 = 10 然后 例如3 cboOption1 = 10

我有4个组合框,称为:

cboOption1 
cboOption2 
cboOption3 
cboOption4
它们中的每一个都可以有两个值中的一个,10点或20点,由用户从下拉列表中选择。但是,用户只能在所有下拉列表中选择最多40个点,此后将禁用其余的下拉列表

例如1

cboOption1 = 20
cboOption2 = 20
然后

例2

cboOption1 = 10
cboOption2 = 20
cboOption3 = 10
然后

例如3

cboOption1 = 10
cboOption2 = 10
cboOption3 = 10
cboOption3 = 40
然后

我的问题

目前我遇到的困难是如何根据用户输入打开/关闭组合框。到目前为止,这是我的代码,它似乎工作得不太好,不知如何改进它

到目前为止的代码

Sub checkTotal(var1, var2, var3, var4, total)
so1 = Int(var1)
so2 = Int(var2)
so3 = Int(var3)
so4 = Int(var4)
total = Nz(so1, 0) + Nz(so2, 0) + Nz(so3, 0) + Nz(so4, 0)

If total > 40 And (so1 = "20" Or so2 = "20" Or so3 = "20" Or so4 = "20") Then
   cboOption3.Value = ""
   cboOption3.Enabled = False
   cboOption4.Value = ""
   cboOption4.Enabled = False
End If

MsgBox total
End Sub

Private Sub cboOption1_Change()
Call checkTotal(cboOption1.Column(1), cboOption2.Column(1), cboOption3.Column(1), cboOption4.Column(1), so1RunningTotal)
End Sub

Private Sub cboOption2_Change()
Call checkTotal(cboOption1.Column(1), cboOption2.Column(1), cboOption3.Column(1), cboOption4.Column(1), so1RunningTotal)
End Sub

Private Sub cboOption3_Change()
Call checkTotal(cboOption1.Column(1), cboOption2.Column(1), cboOption3.Column(1), cboOption4.Column(1), so1RunningTotal)
End Sub

Private Sub cboOption4_Change()
Call checkTotal(cboOption1.Column(1), cboOption2.Column(1), cboOption3.Column(1), cboOption4.Column(1), so1RunningTotal)
End Sub

请阅读我对问题的评论。我建议这样做:

cboOption3.Enabled = CBool((cbo1Value + cbo2Value)<40)
cboOption4.Enabled = CBool((cbo1Value + cbo2Value + cbo3Value)<40)

请参阅:

如果每个组合框只能容纳10和20,如何在所有下拉列表中选择40?你还有其他组合框吗?顺便说一句:它是Access数据库吗?
10+10+10+10
,或
10+10+20
,或
20+20
根据您的要求,CBooption 1和CBooption 2应始终处于启用状态,CBooption 3和CBooption 4的状态取决于CBooption 1和CBooption 2的值。好。。。第一次获取cboOption1和cboOption2之和,如果小于40,则应启用cboOption3(添加cboOption3的值)。如果总数仍然小于40,则应启用cboOption4。这很容易做到。想想看;)顺便说一句:上面示例中的CBool()函数不是必需的。它是为了更好地理解而添加的。。。
None disabled
Sub checkTotal(var1, var2, var3, var4, total)
so1 = Int(var1)
so2 = Int(var2)
so3 = Int(var3)
so4 = Int(var4)
total = Nz(so1, 0) + Nz(so2, 0) + Nz(so3, 0) + Nz(so4, 0)

If total > 40 And (so1 = "20" Or so2 = "20" Or so3 = "20" Or so4 = "20") Then
   cboOption3.Value = ""
   cboOption3.Enabled = False
   cboOption4.Value = ""
   cboOption4.Enabled = False
End If

MsgBox total
End Sub

Private Sub cboOption1_Change()
Call checkTotal(cboOption1.Column(1), cboOption2.Column(1), cboOption3.Column(1), cboOption4.Column(1), so1RunningTotal)
End Sub

Private Sub cboOption2_Change()
Call checkTotal(cboOption1.Column(1), cboOption2.Column(1), cboOption3.Column(1), cboOption4.Column(1), so1RunningTotal)
End Sub

Private Sub cboOption3_Change()
Call checkTotal(cboOption1.Column(1), cboOption2.Column(1), cboOption3.Column(1), cboOption4.Column(1), so1RunningTotal)
End Sub

Private Sub cboOption4_Change()
Call checkTotal(cboOption1.Column(1), cboOption2.Column(1), cboOption3.Column(1), cboOption4.Column(1), so1RunningTotal)
End Sub
cboOption3.Enabled = CBool((cbo1Value + cbo2Value)<40)
cboOption4.Enabled = CBool((cbo1Value + cbo2Value + cbo3Value)<40)
Sub checkTotal(ByVal var1 As Integer, ByVal var2 As Integer, ByVal var3 As Integer, ByVal var4 As Integer)