Vba 在满足特定限制后禁用组合框
我有4个组合框,称为: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
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)