限制选中指定个数CheckBox控件(2/2)

实例需求:工作表中有8个CheckBox控件(下文中简称为控件),现在需要实现限制用户最多只能勾选4个控件。

在上一篇博客中已经实现了这个需求,其基本思路是用户选中第5个控件时,事件代码将取消勾选最后一个选中的控件。其实这个案例也可以使用防患于未然的思路来解决,即用户选中4个控件之后,就禁用其他控件,用户当然也就无法再勾选更多控件。

限制选中指定个数CheckBox控件(1/2)

示例代码如下。

Sub CheckboxeEvent()
    Dim oCB As CheckBox, bFlag As Boolean, CBCnt As Long
    Dim OffCol As Collection, oSht As Worksheet
    Const MAX_CHECKED As Long = 4    
    Set oSht = Worksheets("Sheet1")
    CBCnt = oSht.CheckBoxes.Count
    Set OffCol = New Collection
    For Each oCB In ActiveSheet.CheckBoxes
        If oCB.Value = xlOff Then OffCol.Add oCB
    Next oCB
    bFlag = ((CBCnt - OffCol.Count) = MAX_CHECKED)
    For Each oCB In OffCol
        oCB.Interior.Color = IIf(bFlag, RGB(188, 188, 188), vbWhite)
        oCB.Enabled = Not bFlag
    Next oCB
End Sub

【代码解析】
第4行代码设置最多选中4个控件。
第5行代码获取指定工作表对象。
第6行代码获取工作表中CheckBox控件个数。
第7行代码创建Collection对象。
第8~10代码遍历工作表中的控件,将当期未被选中的控件添加到OffCol对象中。
第11行代码设置标志布尔变量bFlag,如果当前选中的控件个数与MAX_CHECKED相同,则bFlag值为True。
第12~14行代码循环遍历未被选中的控件。
如果bFlag值为True,第13行代码将控件填充色设置为灰色,第14行代码禁用该控件,以实现用户无法勾选该控件。

所有CheckBox控件都指定宏为CheckboxeEvent()过程,最终效果如下图所示。

限制选中指定个数CheckBox控件(2/2)_第1张图片

你可能感兴趣的:(控件,VBA,Excel,CheckBox控件,复选框,选中指定个数,多选,控件)