【发布时间】:2020-06-09 01:28:57
【问题描述】:
我创建了多个复选框,我想在用户点击复选框时提示他们。他们只能使用正确的 PIN 更改复选框的值。如果他们输入了错误的 PIN,复选框将恢复为原始值。 但是,每次尝试还原复选框值时,它似乎都会递归调用 ChkBoxGroup_Click() 事件,直到输入正确的密码。
Private Sub ChkBoxGroup_Click()
Dim ValidatePIN_RNT As Boolean
ValidatePIN_RNT = ValidatePIN()
If Not ValidatePIN_RNT Then
ChkBoxGroup.Value = Not ChkBoxGroup.Value
Exit Sub
End If
End Sub
【问题讨论】:
-
在
ChkBoxGroup.Value = Not ChkBoxGroup.Value之前设置Application.EnableEvents = False,并在更改完成后将其更改回TRUE。顺便说一句,如果您从代码中删除Exit Sub行会发生什么? -
感谢您回复我。我在 ChkBoxGroup.Value 之前添加了 Application.EnableEvents = False 但它仍然不起作用。 (在输入正确的 PIN 之前仍然递归。)删除 Exit Sub 不会改变任何内容。
-
还是绕过了“End if”直接跳转到 ChkBoxGroup_change() 事件然后转到 ChkBoxGroup_Click 事件。 Private Sub ChkBoxGroup_Change() '什么也不做。 'If nRevert = True Then ChkBoxGroup.Value = Not ChkBoxGroup.Value 'Debug.Print "ChkBoxGroup_Change" End Sub Private Sub ChkBoxGroup_Click() Dim ValidatePIN_RNT As Boolean ValidatePIN_RNT = ValidatePIN() If Not ValidatePIN_RNT Then Application.EnableEvents = False ChkBoxGroup.Value = Not ChkBoxGroup.Value 'Exit Sub End If End Sub
-
没有。删除(或添加)
Exit Sub不会改变任何内容,因为它位于子目录的末尾。但是,ChkBoxGroup是什么动物?如果是一组相关的 CheckBox,则无法设置Value。相反,您应该捕获组中任何一个 CheckBox 的更改,并将其值返回到与用户所做的相反的值。考虑使用Application.Undo,但一定要使用Application.EnableEvents = False,以确保您的宏所做的更改不会再次触发相同的事件。