Vba MS Access before update cancel事件不适用于未绑定组合框

Vba MS Access before update cancel事件不适用于未绑定组合框,vba,ms-access,Vba,Ms Access,我在Access中有一个组合框,它有一个绑定到表的行源,但不与表单共享同一个记录源。我希望用户能够从下拉框中选择项目,但我希望在他们更改内容之前给他们一个警告,如果他们说“否”,则撤消如下更改: Private Sub cboSelectAddress_BeforeUpdate(Cancel As Integer) Dim rs As New ADODB.Recordset Dim prevAddress As String 'prevAddress = Me.cboS

我在Access中有一个组合框,它有一个绑定到表的行源,但不与表单共享同一个记录源。我希望用户能够从下拉框中选择项目,但我希望在他们更改内容之前给他们一个警告,如果他们说“否”,则撤消如下更改:

Private Sub cboSelectAddress_BeforeUpdate(Cancel As Integer)
    Dim rs As New ADODB.Recordset
    Dim prevAddress As String

    'prevAddress = Me.cboSelectAddress.Value

    If MsgBox("Are You sure you want to change the value of the combo box?", vbQuestion + vbYesNo + vbDefaultButton2, "CTNO change altert") = vbYes Then

        'DO SOMETHING
    Else
        'Me.cboSelectAddress.Value = prevAddress
        Cancel = True
    End If

End Sub
只要我更改组合框的值,组合框的值就会更改,然后才会触发before_update事件


为了缓解这种情况,我尝试在更改前存储地址框的值,并在用户选择
NO
时将其设置回原始值,但这也会产生错误,因为它试图通过更新前事件本身。正如您所看到的,我已经注释掉了代码的这一部分。

我刚刚了解到,即使在绑定控件中,组合框值更改后也会触发Prefore update事件。为了缓解这种情况,我添加了:
Me.cboSelectAddress.Undo
如果用户选择否

是否调试了步骤?您将看到prevAddress正在接收输入的新值,而不是旧值。因此,即使您没有收到错误,也不会将combobox设置为以前的输入。是的,您是对的,刚刚意识到为什么需要对未绑定控件的用户输入进行微管理?我刚刚了解到,即使在绑定控件中,combobox值更改后,更新前事件也会触发。为了缓解这种情况,我添加了:
Me.cboSelectAddress.Undo
,如果用户选择否。您可以编写自己问题的答案。