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

发布时间:2024年01月05日

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

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

Dim OnDic As Object
Sub CheckboxeEvent()
    Dim oCB As CheckBox, OnCol As Collection
    Dim oSht As Worksheet
    Const MAX_CHECKED As Long = 4
    Set OnCol = New Collection
    Set oSht = Worksheets("Sheet1")
    If OnDic Is Nothing Then
        Set OnDic = CreateObject("scripting.dictionary")
        For Each oCB In oSht.CheckBoxes
            If oCB.Value = xlOn Then OnDic(oCB.Name) = ""
        Next
    End If
    For Each oCB In oSht.CheckBoxes
        If oCB.Value = xlOn Then OnCol.Add oCB
    Next oCB
    If OnCol.Count > MAX_CHECKED Then
        For Each oCB In OnCol
            If Not OnDic.exists(oCB.Name) Then
                 oCB.Value = xlOff
            End If
        Next
    Else
        OnDic.RemoveAll
        For Each oCB In OnCol
            OnDic(oCB.Name) = ""
        Next
    End If
End Sub

【代码解析】
第1行代码声明模块基本对象变量,用于保存已经选中的控件。
第5行代码设置最多选中4个控件。
第6行代码创建Collection对象实例。
第7行代码指定工作表对象。
如果首次运行此代码过程,OnDic对象为空,则第9行代码创建字典对象,第10~12代码遍历工作表中的控件,如果用户已经勾选控件,第11行代码将控件名称保存在字典对象中。
第14~16代码遍历工作表中的控件,将当期已经选中的控件添加到OnCol对象中。
第17行代码判断当前选中的控件个数是否大于指定个数(4)。
如果已经超过指定个数,第18~22行代码循环遍历OnCol对象。
第19行代码查找存在于OnCol对象中,但是不存在于OnDic对象中的控件,满足上述条件的控件就是最后一个被选中的控件。
第20行代码取消勾选控件。
由于用户可能会取消勾选某个控件,所以第24行代码先清空字典控件,然后第25~27行代码将当前选中的控件添加到字典控件中。

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

请添加图片描述

文章来源:https://blog.csdn.net/taller_2000/article/details/135406932
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。