【问题标题】:excel macro - checkbox to select other checkboxesexcel宏 - 选择其他复选框的复选框
【发布时间】:2018-02-10 17:51:15
【问题描述】:

我正在尝试通过复选框选择选项。我想让一个特定的框自动检查其他几个框。当我在分配下面的宏后单击有问题的框时,我得到Object required (Error 424):

任何帮助将不胜感激

Public Sub CheckBox1_Click()
If CheckBox21.Value = True Then
    CheckBox2.Value = True
    CheckBox5.Value = True
    CheckBox6.Value = True
    CheckBox18.Value = True
    CheckBox19.Value = True
    CheckBox20.Value = True
    CheckBox22.Value = True
    CheckBox23.Value = True
    CheckBox2.Enabled = False
    CheckBox5.Enabled = False
    CheckBox6.Enabled = False
    CheckBox18.Enabled = False
    CheckBox19.Enabled = False
    CheckBox20.Enabled = False
    CheckBox22.Enabled = False
    CheckBox23.Enabled = False
Else
    CheckBox2.Enabled = True
    CheckBox5.Enabled = True
    CheckBox6.Enabled = True
    CheckBox18.Enabled = True
    CheckBox19.Enabled = True
    CheckBox20.Enabled = True
    CheckBox22.Enabled = True
    CheckBox23.Enabled = True
End If

End Sub

【问题讨论】:

  • 您使用了哪种复选框?表单控件还是 ActiveX?此错误表明其中一个或所有复选框不存在。如果它们是表单控件,那么这不是您与它们交互的方式。
  • 嗨 JNevill,我使用了表单控制复选框。所以我需要用activeX复选框替换?我使用了表单控件,因为我在文档其他地方的计算中使用了指向具有真/假的单元格的链接
  • 是的,如果您打算使用 VBA 与您的 excel 表单内容进行交互,我建议您使用 ActiveX。编程能力要容易 1000 倍。如果您坚持使用表单控件,请考虑通过 VBA 将每个复选框的链接单元格的值更改为“true”或“false”,而不是尝试设置它们的 .value 属性。当转到 ActiveX 时,您可以在 VBA 中使用它的 click 事件单击复选框时将单元格设置为 true/false。更多的开销,但更多的控制。两条路线肯定有取舍。
  • 您能否通过 VBA 将每个复选框的“链接单元格”扩展为“true”或“false”,而不是尝试设置它们的 .value 属性”我在其他地方使用 true/false 逻辑来做一些数学,但我认为我必须使用宏中的值。我可以在宏中引用真/假链接单元格吗?我会做这样的事情:如果 D5 = True Then D6 = True
  • 其实我想通了 Public Sub CheckBox1_Click() If Range("AF3").Value = True Then Range("AA3").Value = True Range("AC3").Value = True Range("AE3").Value = True Range("AG3").Value = True Range("AD3").Value = True Range("AI3").Value = True Else Range("AA3").Value =错误范围("AC3").Value = 错误范围("AE3").Value = 错误范围("AG3").Value = 错误范围("AD3").Value = 错误范围("AI3").Value = False End If End Sub 谢谢!

标签: excel vba checkbox


【解决方案1】:

这对你有用吗?

Private Sub CheckBox21_Change()

If CheckBox21.Value = True Then
    CheckBox2.Value = True
    CheckBox5.Value = True
    CheckBox6.Value = True
    CheckBox18.Value = True
    CheckBox19.Value = True
Else
    CheckBox2.Value = False
    CheckBox5.Value = False
    CheckBox6.Value = False
    CheckBox18.Value = False
    CheckBox19.Value = False
End If

【讨论】:

  • 我必须作为私人潜艇运行吗?我在其中一个模块中内置了这个作为公共子。那是错的吗?我不确定如何将私有子分配给复选框。我在您的示例中将私有更改为公共,并在底部添加了 end sub。我仍然收到错误并调试第一条 IF 行
  • 在 IF 行中,有一个双“.Value.Value”会导致错误。您还可以像在您的示例中那样将子名称从“CheckBox21_Change”更改为“CheckBox1_Change”(并重命名您的旧名称)。如果这没有帮助,请尝试将此宏分配给您感兴趣的复选框(右键单击复选框->“分配宏”)。您创建复选框的方式很有趣 - 它是 Form Control 或 AciveX Control。请提供更多相关信息。
  • 感谢安德烈,最初我没有双倍 value.value。我正在执行此操作的复选框是 21,所以我认为子名称必须匹配。它是表单控制复选框。
【解决方案2】:

我想出了如何编辑单元格,而不是复选框

Public Sub CheckBox1_Click()
If Range("AF3").Value = True Then
    Range("AA3").Value = True
    Range("AC3").Value = True
    Range("AE3").Value = True
    Range("AG3").Value = True
    Range("AD3").Value = True
    Range("AI3").Value = True
    Range("AH3").Value = True
    Range("AK3").Value = True
Else
    Range("AA3").Value = False
    Range("AC3").Value = False
    Range("AE3").Value = False
    Range("AG3").Value = False
    Range("AD3").Value = False
    Range("AI3").Value = False
    Range("AH3").Value = False
    Range("AK3").Value = False
End If

结束子

【讨论】:

    【解决方案3】:

    你可以把你的日常工作折叠成:

    Public Sub CheckBox1_Click()
        Range("AA3,AC3:AE3,AG3:AI3,AK3").Value = Range("AF3").Value
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2020-10-12
      相关资源
      最近更新 更多