【问题标题】:Create an ActiveX checkbox that check and unchecks all other checkboxes创建一个选中和取消选中所有其他复选框的 ActiveX 复选框
【发布时间】:2020-08-12 18:22:59
【问题描述】:

我有一张带有很多复选框的表格。第一个有标题全选,当你点击它时,所有的复选框都应该被选中。这很好用,但我也想通过取消选中它来取消选中所有复选框,但我无法让它工作。我收到错误 1004。这是我正在尝试的代码:

Private Sub CheckBox1_Click()
On Error GoTo finished
For i = 2 To 200
    If ActiveSheet.OLEObjects("CheckBox1").Object.Value = True Then ' <- this line gives the 1004 error
        ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = False
    Else
        ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = True
    End If
Next i
Exit Sub
finished:
End Sub

【问题讨论】:

  • 错误信息的Text是什么?您确定您有一个具有该名称的复选框吗?仅供参考,如果此代码在工作表代码模块中,那么您应该使用 Me 来引用工作表,而不是 ActiveSheet。这样,当您最终有代码在工作表处于活动状态时更改复选框值时,它不会中断。
  • 文本是“应用程序定义或对象定义错误”docs.microsoft.com/sv-se/office/vba/Language/Reference/… 我确实有一个具有该名称的复选框。它是通过按下按钮创建的,然后在代码中重命名为 Checkbox1。如果我右键单击它并选择查看代码,则会显示子 CheckBox1_Click()
  • 这是一个重要的细节——在运行时创建控件以及工作表模块中的相关代码会给你带来各种各样的问题——为了让所有连接工作表模块的东西都需要重新编译,这带来了挑战....您可能需要重新考虑您的方法。

标签: excel vba checkbox activex


【解决方案1】:

对我来说很好 - 我建议进行一些小的更改 - 使用 Me 代替 activesheet,并简化设置其他复选框的逻辑。

Private Sub CheckBox1_Click()
    Dim i As Long, bOn As Boolean

    bOn = Me.OLEObjects("Checkbox1").Object.Value
    For i = 2 To 200
        Me.OLEObjects("Checkbox" & i).Object.Value = bOn
    Next i

End Sub

【讨论】:

  • 还是不行,在bOn = Me.OLEObjects("Checkbox1").Object.Value Strange一行出现同样的1004错误!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2021-12-01
  • 2014-04-29
  • 2015-11-17
相关资源
最近更新 更多