【问题标题】:Having one checkbox ticking / unticking multiple other checkboxes in Excel VBA在 Excel VBA 中有一个复选框勾选/取消勾选多个其他复选框
【发布时间】:2014-03-12 01:04:01
【问题描述】:

我有一个包含数百个复选框的 Excel 表格。我希望其中一些复选框(我将其称为“主复选框”)勾选或取消勾选其他 12 个复选框的行。到目前为止,我只能在整个工作表中找到执行此操作的代码(例如,取消选中整个工作表中的复选框),而不是在选定的复选框数组中。

理想情况下,宏应该理解以动态方式勾选/取消勾选的框(即通过相对于主复选框所在的位置查找它们),因为我有许多要实现,并且必须硬编码受每个主复选框影响的每个复选框都会非常乏味...

我不确定我的盒子是否是 activx,但如果有帮助,我使用以下命令通过宏实现它们: ActiveSheet.CheckBoxes.Add

感谢您的帮助!

【问题讨论】:

    标签: excel vba checkbox


    【解决方案1】:

    这些复选框是 Excel 自己的;即不是 ActiveX 的。

    编写代码以纯粹根据动态放置的控件的位置来推断关系比命名控件并让每个控件更新正确的控件要复杂得多。即使有数百个;)这里的答案是自动化控件命名过程。

    这里的关键因素是对此类复选框的更新必须触发一些代码来处理其余部分的检查/清除。因此,您必须为每个主复选框分配一个宏,该宏将在单击该复选框时运行。或者,您可以将复选框的值链接到一个单元格并使用工作表的 Update 事件来运行一些代码(尽管这是一个不太精细的解决方案)。

    如果您想动态地执行此操作(即纯粹在布局上),则在宏中检查每个主复选框的位置和大小,并将其与所有其他复选框的位置和大小进行比较。只有您可以决定哪个布局标准导致哪个子复选框属于哪个主复选框(例如,它必须缩进,还是在它的右侧,并且还要考虑所有其他主复选框的位置 - 它们是在一个下面缩进并不意味着它们不能属于另一个!)

    如果您只是为每个主复选框和子复选框指定一个名称,那么宏会变得更加简单。在这种情况下,我会选择使用命名约定:例如将每个主复选框命名为“MasterX”,并让所有子复选框使用以随附主复选框名称开头的派生名称,例如“MasterX_ChildY”。然后,您可以拥有知道哪个复选框属于哪个主复选框的通用代码。从那时起,您只需要从每个主复选框的单击宏中调用如下所示的子:

    Sub UpdateChildCheckboxes()
      ' Look which master checkbox is clicked
      Dim masterCheckboxName As String
      masterCheckboxName = Application.Caller
      Dim masterCheckbox As CheckBox
      Set masterCheckbox = ActiveSheet.CheckBoxes.Item(masterCheckboxName)
    
      ' And update all belonging child checkboxes
      Dim nextCheckbox As CheckBox
      For Each nextCheckbox In ActiveSheet.CheckBoxes
        ' Is this a child of this master?
        If InStr(nextCheckbox.Name, masterCheckboxName & "_") = 1 Then
          ' Yes; update it
          nextCheckbox.Value = masterCheckbox.Value
        End If
      Next
    End Sub
    

    此子复选框只是将所有子复选框设置为与其主复选框相同的状态,因此需要对其进行一些增强以专门执行您想要的操作(这是您只能执行的操作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 2015-07-07
      • 2015-12-06
      • 2018-02-10
      • 1970-01-01
      • 2015-01-08
      相关资源
      最近更新 更多