如何在 VBA 上循环访问 ActiveX 复选框

How to Loop Through ActiveX Checkboxes on VBA

我实际上是在尝试制作一个用户表单来控制工作簿表中的每个复选框(它主要是显示公司特定时期数据的图表),因为每个图表都有相同的复选框(ActiveX 的)在他们身上有相同的名字我虽然关于制作一个始终处于活动状态的用户表单,这样客户端可以 select 他将使用哪些并且它只会循环通过其他 sheets 而没有问题。

但问题首先出在我的代码上:

Dim ws As Worksheet

If Me.CheckBox1.Value = True Then
    For Each ws In ThisWorkbook.Worksheets
        ws.OLEObjects("chkAno1").Object.Value = 1
    Next ws

ElseIf Me.CheckBox1.Value = False Then
    For Each ws In ThisWorkbook.Worksheets
        ws.OLEObjects("chkAno1").Object.Value = 0
    Next ws

End If

我只用了一个复选框来测试它(我想影响的每个 sheet 中都有一个“chkAno1”)但每次我 运行 代码并单击复选框我收到“错误 1004:对象“_Worksheet”中的方法“OLEObjects”失败”,奇怪的是,如果我将“ws”更改为“ActiveSheet”,代码工作正常,但只更新当前打开的sheet.

所以我现在很茫然。

感谢您的帮助。我发现了问题,有些工作表上没有任何复选框,所以代码一直给我错误。

我找到的解决方案是将 On Error Resume Next 放在开头,效果非常好! (实际上我也需要把它放在图表上)

但最后我最终修改了代码,使用 ws.ChartObjects("grafico").Chart.FullSeriesCollection(1).IsFiltered = True 而不是 ws.OLEObjects("chkAno1").Object.Value = 1 直接影响图表,因为最后更新每个复选框的过程,之后所有图表都会在一些较旧的计算机上实际上非常慢并且直接更新图表显示速度大大提高。

感谢所有发表评论的人,希望我找到的解决方案可以帮助其他人!