【问题标题】:Uncheck all checkboxes across entire workbook via CommandButton通过 CommandButton 取消选中整个工作簿中的所有复选框
【发布时间】:2013-05-24 23:14:24
【问题描述】:

我想要一个代码来取消选中工作簿中所有工作表的所有名为“CheckBox1”的复选框。不幸的是,我当前的代码不起作用,我不知道为什么 - 它只适用于活动工作表。

Private Sub CommandButton1_Click()

    Dim Sheet As Worksheet
    For Each Sheet In ThisWorkbook.Worksheets

        Select Case CheckBox1.Value
        Case True: CheckBox1.Value = False
        End Select  
    Next
End Sub

【问题讨论】:

    标签: excel checkbox activexobject vba


    【解决方案1】:

    此代码遍历所有工作表(除了名为 Sheet100OtherSheet 的工作表)并取消选中您所有的@ 987654323@ 个复选框,名为 CheckBox1

    Sub uncheck_boxes()
    
        Dim ws As Worksheet
        Dim xbox As OLEObject
        For Each ws In ThisWorkbook.Worksheets
            If ws.Name <> "Sheet100" And ws.Name <> "OtherSheet" Then
                For Each xbox In ws.OLEObjects
                    ws.OLEObjects("CheckBox1").Object.Value = False
                Next
            End If
        Next
    End Sub
    

    取消选中所有工作表中的所有 ActiveX 复选框,而不考虑使用的名称

    Sub uncheck_all_ActiveX_checkboxes()
    
        Dim ws As Worksheet
        Dim xbox As OLEObject
        For Each ws In ThisWorkbook.Worksheets
            For Each xbox In ws.OLEObjects
                ws.OLEObjects(xbox.Name).Object.Value = False
            Next
        Next
    End Sub
    

    要取消选中电子表格上的所有 Form Control checkboxes,请使用

    Sub uncheck_forms_checkboxes()
    
        Dim ws As Worksheet
        Dim xshape As Shape
        For Each ws In ThisWorkbook.Worksheets
            For Each xshape In ws.Shapes
                If xshape.Type = msoFormControl Then
                    xshape.ControlFormat.Value = False
                End If
            Next
        Next
    End Sub
    

    【讨论】:

    • 谢谢你的帮助。发生了一些非常奇怪的事情:这似乎适用于我手动创建的框的 2 张纸;但是,它似乎不适用于后续工作表,我只是复制粘贴了复选框和 VBA 代码。我检查了多次,这些项目的名称与我手动创建的名称相同。我真的不明白为什么这不起作用?手动创建所有框是不可行的,因为我有太多的工作表。非常感谢您的帮助。
    • @jcv 我明白了。我敢打赌,这很简单,你不知何故忽略了男人。打开一个新工作簿并尝试手动创建一些复选框并将一些复制到其他工作表。然后运行此代码并查看行为。我已经在我的机器上进行了测试,一切正常。在您的情况下,放置一些 Debug.Print 行,以查看您是否真的在遍历所有工作表、所有复选框等
    • 嗯,谢谢伙计。我做了一些分析并遇到了一个新错误 - 请参阅我更新的主帖。当我运行您的 VBA 代码时,CheckBox 代码中出现错误@Case False [...] ActiveSheet.Shapes 等。您能看看吗?
    【解决方案2】:

    [编辑以下cmets]

    试试这个:

    Sub test()
    Dim ws As Excel.Worksheet
    Dim s As Object
    
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "Definitions" And ws.Name <> "fx" Then
            Set s = Nothing
            On Error Resume Next
            Set s = ws.OLEObjects("CheckBox1")
            On Error GoTo 0
            If Not s Is Nothing Then
                s.Object.Value = False
            End If
        End If
    Next ws
    
    End Sub
    

    这是一个全局函数(它不属于特定的工作表),但您可以根据需要将其放在CommandButton1_Click() 中。

    如果您的工作表(定义和 fx 除外)始终包含 CheckBox1,则您可能不需要错误阻止。或者删除该 if 语句。

    【讨论】:

    • 芭丝谢芭,感谢您的快速回复。我尝试了您的两个建议,它们产生了一个代码错误,分别说明“预期:表达式”和“对象不支持此属性或方法”。它们是 ActiveX 控件元素。
    • 您使用的是哪个版本的 Excel?而且,复选框是表单控件还是 ActiveX 控件(或者您不知道)?
    • Excel 2007 和 ActiveX 控件如上所述
    • 谢谢,非常感谢您的帮助!但是,似乎仍然存在问题......我已经更新了我的主要帖子。
    猜你喜欢
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多