【问题标题】:Clear CheckBoxes in Specific Columns清除特定列中的复选框
【发布时间】:2015-02-26 05:05:35
【问题描述】:

我正在尝试创建一个宏来清除两个特定列中的所有复选框(每列中大约有 40 个复选框)。这是我所拥有的:

Worksheets("Roster").Column(5).CheckBoxes.Value = False
Worksheets("Roster").Column(7).CheckBoxes.Value = False

我也试过这个:

ActiveSheet.Column(5).CheckBoxes.Value = False
ActiveSheet.Column(7).CheckBoxes.Value = False

【问题讨论】:

    标签: excel checkbox vba


    【解决方案1】:

    复选框不是列的成员。

    如果它们是表单控件,则它们属于工作表的 CheckBoxes 集合。如果 ActiveX 控件属于工作表的 OLEObjects 集合,但也可以通过工作表的 Shapes 集合访问。

    在任何一种情况下,您都可以通过它们的索引号(CheckBoxes(1)、OLEObjects(1))或它们的名称来引用它们。


    如果它们是 form-controls,那么您可以使用以下代码找到那些链接 (LinkedCell) 到特定列的控件:

    Dim ckb As Object
    Dim sLinked As String
    
    For Each ckb In ActiveSheet.CheckBoxes
        sLinked = ckb.LinkedCell
        If sLinked <> "" Then
            '.. there is a LinkedCell
            If Range(sLinked).Column = 5 Or Range(sLinked).Column = 7 Then
                Debug.Print "found one.."
                Range(sLinked).Value = False
            End If
        End If
    Next ckb
    

    请注意,这会更改链接单元格中的值,而不是控件本身。

    应该可以用 ActiveX 控件做类似的事情。

    【讨论】:

    • 嗯,这就解释了为什么它不起作用。有没有办法选择第 5 列中的每个复选框? - 没关系......这没有意义
    • 您还没有说明它们是什么类型的控件,但我已经添加到我的答案中。
    • 谢谢,我以这个结尾:For i = 2 To 39Worksheets("Roster").Range("E" &amp; i).Value = FalseWorksheets("Roster").Range("G" &amp; i).Value = FalseNext i
    • 呃,如果你知道具体的范围,那么你就可以Range("E2:E39,G2:G39").Value = False
    猜你喜欢
    • 2012-03-24
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2016-01-16
    相关资源
    最近更新 更多