【发布时间】:2018-12-28 09:25:53
【问题描述】:
我的表单中有 5 个组合框,我希望用户只能选择 2 个。选择 2 个后,其他 3 个将被禁用?我是怎么做的?我知道你可以做一个组合框并通过 afterupdate 禁用其余的组合框,如下所示。感谢你的帮助! :)
Private Sub cboOR_AfterUpdate()
Me.cboA.Enabled = False
End Sub
【问题讨论】:
我的表单中有 5 个组合框,我希望用户只能选择 2 个。选择 2 个后,其他 3 个将被禁用?我是怎么做的?我知道你可以做一个组合框并通过 afterupdate 禁用其余的组合框,如下所示。感谢你的帮助! :)
Private Sub cboOR_AfterUpdate()
Me.cboA.Enabled = False
End Sub
【问题讨论】:
看看这个
Private Sub Combo0_AfterUpdate()
If CheckCombo Then
disableCombo
Else
enableCombo
End If
End Sub
Private Sub Combo10_AfterUpdate()
If CheckCombo Then
disableCombo
Else
enableCombo
End If
End Sub
Private Sub Combo12_AfterUpdate()
If CheckCombo Then
disableCombo
Else
enableCombo
End If
End Sub
Private Sub Combo14_AfterUpdate()
If CheckCombo Then
disableCombo
Else
enableCombo
End If
End Sub
Private Sub Combo16_AfterUpdate()
If CheckCombo Then
disableCombo
Else
enableCombo
End If
End Sub
Private Function CheckCombo() As Boolean
Dim retVal As Long
retVal = IIf(Len(Nz(Combo0, "")) > 0, 1, 0) + IIf(Len(Nz(Combo10, "")) > 0, 1, 0) + IIf(Len(Nz(Combo12, "")) > 0, 1, 0) + IIf(Len(Nz(Combo14, "")) > 0, 1, 0) + IIf(Len(Nz(Combo16, "")) > 0, 1, 0)
CheckCombo = (retVal >= 2)
End Function
Private Sub enableCombo()
Combo0.Enabled = True
Combo10.Enabled = True
Combo12.Enabled = True
Combo14.Enabled = True
Combo16.Enabled = True
End Sub
Private Sub disableCombo()
If Len(Nz(Combo0, "")) <= 0 Then Combo0.Enabled = False
If Len(Nz(Combo10, "")) <= 0 Then Combo10.Enabled = False
If Len(Nz(Combo12, "")) <= 0 Then Combo12.Enabled = False
If Len(Nz(Combo14, "")) <= 0 Then Combo14.Enabled = False
If Len(Nz(Combo16, "")) <= 0 Then Combo16.Enabled = False
End Sub
【讨论】:
把这个Sub放到表单的模块中
Private Sub changeStateOfCB()
Dim nameChB() As String
Dim cMax As Long
Dim ctrl As Control
Dim cValued As Long
Dim nameCurr As Variant
' names of CB
nameChB = Split("ComboName1#ComboName2#ComboName3#ComboName4#ComboName5", "#")
' max allowed values
cMax = 2
' counting with values
For Each nameCurr In nameChB
If Not Me.Controls(nameCurr).Value Is Null Then
cValued = cValued + 1
End If
Next
' disabling if needed
For Each nameCurr In nameChB
If Not Me.Controls(nameCurr).Value Is Null Then
Me.Controls(nameCurr).Enabled = (cValued < cMax)
End If
Next
End Sub
根据您在nameChB 行中的名称更改字符串中的名称。
并为每个组合框创建 AfterUpdate 调用事件过程
changeStateOfCB
【讨论】: