【问题标题】:Excel VBA - Turn On ActiveX Checkbox When a Series of Subsequent Checkboxes are All Turned OnExcel VBA - 当一系列后续复选框全部打开时打开ActiveX复选框
【发布时间】:2014-10-20 22:41:36
【问题描述】:

全部-

第一个海报,所以如果我在这里做错了什么,或者(更有可能)发布一个非常简单的问题,我提前道歉。

我目前正在使用一系列复选框在 Excel 中制作一个大型清单。一些“主复选框”在它们下面有一个子系列的复选框(即组成另一个任务的小任务或步骤)。我想要做的是在选中所有子系列复选框时打开主复选框(被选中)。这样做有一个简单的 VBA 答案吗?我确定有,但我似乎找不到。

基本上是这样设置的:

主复选框任务一

      Step One Check Box
      Step Two Check Box
      Step Three Check Box

在此先感谢大家对此提供的所有帮助,因为除了一些简单的命令之外,我对在 Excel 中使用 VBA 还比较陌生。

(编辑:2014 年 8 月 28 日)

我认为如果我只是在此处提供代码可能会更容易,因为我很难理解。我目前设置的 VBA 旨在反映复选​​框单击。基本上,如果在“新产品 - 产品开发”工作表上选中了一个复选框,则该选择会反映在“新产品概述”工作表上。我想要发生的是,如果选中复选框“NPProdDevCB1”、“NPProdDevCB2”、“NPProdDevCB3”和“NPPRodDevCB4”,则自动单击“NPProdDevMainCB”。

这是我为在工作表之间进行镜像而设置的:

私有子 NPProdDevMainCB_Click()

If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevMainCB = True Then
    ThisWorkbook.Sheets("New Product Overview").NPOCBA = True
Else
If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevMainCB = False Then
    ThisWorkbook.Sheets("New Product Overview").NPOCBA = False
End If
End If

结束子

私有子 NPProdDevCB1_Click()

If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevCB1 = True Then
    ThisWorkbook.Sheets("New Product Overview").NPOCB1 = True
Else
If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevCB1 = False Then
    ThisWorkbook.Sheets("New Product Overview").NPOCB1 = False
End If
End If

结束子

私有子 NPProdDevCB2_Click()

If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevCB2 = True Then
    ThisWorkbook.Sheets("New Product Overview").NPOCB2 = True
Else
If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevCB2 = False Then
    ThisWorkbook.Sheets("New Product Overview").NPOCB2 = False
End If
End If

结束子

私有子 NPProdDevCB3_Click()

If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevCB3 = True Then
    ThisWorkbook.Sheets("New Product Overview").NPOCB3 = True
Else
If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevCB3 = False Then
    ThisWorkbook.Sheets("New Product Overview").NPOCB3 = False
End If
End If

结束子

私有子 NPProdDevCB4_Click()

If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevCB4 = True Then
    ThisWorkbook.Sheets("New Product Overview").NPOCB4 = True
Else
If ThisWorkbook.Sheets("New Product - Prod Dev").NPProdDevCB4 = False Then
    ThisWorkbook.Sheets("New Product Overview").NPOCB4 = False
End If
End If

结束子

请告诉我设置此代码的最佳方法,以便在后续复选框全部打开时考虑自动点击。

再次感谢您在这里提供的所有帮助,如果我错过了简单的解决方法,我深表歉意(我可能是这样)。

【问题讨论】:

    标签: excel list vba checkbox


    【解决方案1】:

    即使是您的第一个复选框,也可以在点击中添加类似的内容

    ActiveSheet.CheckBox2.Enabled = 不是 ActiveSheet.CheckBox2.Enabled

    【讨论】:

    • 是的,这并没有真正帮助。看起来这应该很容易,但我找不到任何地方都适用的问题的直接答案,哈哈。不过,谢谢您的意见。
    【解决方案2】:

    在任何子例程(例如复选框)之外定义一个变量。

    Dim boxesChecked = 0
    

    然后,在每个复选框的子程序中,放入:

    if [sub checkbox name].value = true Then
        boxesChecked = boxesChecked + 1
    else
        boxesChecked = boxesChecked - 1
    

    在最后一个子复选框中,把它放在那里:

    if [sub checkbox name].value = true Then
        boxesChecked = boxesChecked + 1
    else
        boxesChecked = boxesChecked - 1
    
    if boxesChecked = [number of sub checkboxes] Then
        [main checkbox name].value = true
    else
        [main checkbox name].value = false
    

    我想这就是你要找的。​​p>

    【讨论】:

    • 嗯,谢谢你的帮助,但我无法让它工作。为了使事情进一步复杂化,我已经有了私人订阅,可以点击所有复选框,将它们全部链接回主“概述”页面。也许我把你的答案放错地方了?
    • 是的,if 语句应该进入那些 Private Subs 以进行复选框点击。
    • 如果我想使用复选框中已经存在的 VBA 代码,请单击 Private subs 以及此代码,它只是另一个 if 语句吗?
    • 只需将该代码放在 if 语句之外。那么它应该可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2011-09-29
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多