Microsoft Access复选框密码

时间:2019-01-17 18:21:49

标签: vba access

我有一个带有复选框的表单,该表单需要密码才能被打勾。 问题是,活动结束后,我在框外单击,它仍然要求我输入密码。

更新:该事件完成,仅此之后,如果我尝试单击其他地方,它将再次触发

Private Sub Signed_by_Mike_BeforeUpdate(Cancel As Integer)

If InputBox("You must provide the correct password to Lock or Unlock CheckBox!", "Password Input") <> "password" Then
 MsgBox "Wrong Password Entered. Operation aborted!", vbCritical
 Cancel = True


End If
End Sub

我希望此事件仅在复选框上发生,但是由于某些原因,如果我尝试在此之后单击表单中的任意位置,则确实会发生此事件。

2 个答案:

答案 0 :(得分:2)

您非常接近-仅在提供密码时缺少使它“记住”的机制-您可以为此使用Static局部变量(“静态”局部变量在过程调用之间保留其值) ,或模块级变量:

Private Sub Signed_by_Mike_BeforeUpdate(Cancel As Integer)
    Static authorized As Boolean

    If Not authorized And InputBox("You must provide the correct password to Lock or Unlock CheckBox!", "Password Input") <> "password" Then
        MsgBox "Wrong Password Entered. Operation aborted!", vbCritical
        Cancel = False
    Else
        authorized = True    
    End If
End Sub

尽管密码错误,Cancel是否应设为True

答案 1 :(得分:0)

那么,BeforeUpdate事件可能是一个棘手的触发点,尤其是在使用消息框输入时。如果确实需要使用此方法,请尝试将其放在AfterUpdate事件中,然后尝试将语法从:<>“ password”更改为:Not Like“ password”。另外,如果这是一种连续的表格类型,那将是一件复杂的事情。

但是如果您仍处于设计阶段,请执行以下操作:我的建议是在复选框的正下方添加一个带有****密码掩码的未标记的小文本框。指示用户在该文本框中输入密码。然后,复选框的AfterUpdate事件中的代码非常简单: 如果me.checkbox = -1那么 如果我不喜欢“ pw”,那么 msgbox“错误的密码” me.checkbox = 0 万一 如果结束