通过 CommandButton 取消选中整个工作簿中的所有复选框

Posted

技术标签:

【中文标题】通过 CommandButton 取消选中整个工作簿中的所有复选框【英文标题】:Uncheck all checkboxes across entire workbook via 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

【问题讨论】:

【参考方案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 控件如上所述 谢谢,非常感谢您的帮助!但是,似乎仍然存在问题......我已经更新了我的主要帖子。

以上是关于通过 CommandButton 取消选中整个工作簿中的所有复选框的主要内容,如果未能解决你的问题,请参考以下文章

复选框选中/取消选中无法与 angularjs 一起正常工作

extjs checkboxselection 标头未更新

通过使用 C# 选中其他复选框来取消选中复选框 [关闭]

如何通过使用alpine js单击一个复选框来选中和取消选中所有复选框

h:commandButton 不能与 JSF bean 一起工作,而页面正在加载

easyUI取消easyui行点击选中事件,智能通过勾选checkbox才能选中行