【问题标题】:Revert a Checkbox value in the ChkBoxGroup_Click event恢复 ChkBoxGroup_Click 事件中的复选框值
【发布时间】: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,以确保您的宏所做的更改不会再次触发相同的事件。

标签: vba checkbox click revert


【解决方案1】:

现在也可以了!我在 excelforum.com 上发现了一个帖子,application.enable 事件设置仅控制工作簿和工作表事件。从帖子中它建议使用全局变量。它对我有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多