【发布时间】:2013-08-10 02:19:18
【问题描述】:
我有 5 个复选框来设置宏的一些选项,其中一个是全选/取消全选复选框。当您选择要删除或标记为已读等的邮件时,我想创建类似于您在基于 Web 的邮箱中所拥有的内容。 当我选中 Select/Unselect All 复选框时,我将其余复选框的值设置为 true,反之亦然。没关系。
当我还想验证是否所有内容都未选中并且我一个一个地选中其他复选框时,问题就出现了,如果最后我选中了所有复选框,那么 Select/Unselect All 复选框将变为选中状态。反之亦然,这意味着如果所有内容都被选中,然后我取消选中其他四个中的一个,那么我将“全部”复选框设置为 false(未选中)。
但似乎即使我只是设置了值,例如 Option1Checkbox.value = True,在 SelectAllCheckbox_Click 事件中,它也会触发 Option1Checkbox_Click 和 Option1Checkbox_Change 事件。
难道不应该只是触发 Change 事件,因为我实际上并没有点击该复选框吗?
发生的情况是我选中了 SelectAll,因此它会将 Option1 变为选中,但是通过这样做,Option1 也会触发 click 事件,因此它取消选中它会再次触发 click 事件,然后再次取消选中 All 复选框中的end 不检查一切,就像在开始时一样。希望这部分足够清楚。
如何避免这种行为?如何确保只触发 Change 事件而不触发 Click 事件?
有没有人有过这样的复选框排列并且遇到过类似的问题?或者您是如何在没有我遇到的行为的情况下做到这一点的?
复选框不在表单上,而只是在工作表上。它们是 ActiveX 控件。而我所拥有的并不复杂:
Private Sub SelectAll_Click()
Option1Checkbox.Value = SelectAll.Value
Option2Checkbox.Value = SelectAll.Value
Option3Checkbox.Value = SelectAll.Value
Option4Checkbox.Value = SelectAll.Value
End Sub
那么选项复选框的点击事件如下所示:
Private Sub Option1Checkbox_Click()
If Option1Checkbox.Value = True And Option2Checkbox.Value = True And Option3Checkbox.Value = True And Option4Checkbox.Value = True Then
SelectAll.Value = True
Else
SelectAll.Value = False
End If
End Sub
这很简单,我看到的最大问题是当复选框没有实际点击时对点击事件的调用。
感谢您的帮助。
【问题讨论】:
-
+1 我刚刚在 Excel 中设计用户表单时遇到了同样的问题。
-
在更改复选框值之前,我尝试使用
Application.EnableEvents = False禁用事件,但它仍然触发了 Click 事件。不知道为什么....?
标签: excel vba events checkbox click