Ms access DoCmd.RunCommand acCmdSaveRecord重置子

Ms access DoCmd.RunCommand acCmdSaveRecord重置子,ms-access,Ms Access,我有一个很简单的表格。您可以添加或编辑信息。但是,当尝试添加记录时,不在列表中事件会激发,但当它到达DoCmd.RunCommand acCmdSaveRecord时,它会返回到开头并再次启动,不会发生任何事情。如果您回答“否”,则它将最终退出sub,但仅在出现错误3270和错误2237后,然后出现一个框,告诉我文本不在列表中 Private Sub CboBrandCode_NotInList(NewData As String, Response As Integer) On Error G

我有一个很简单的表格。您可以添加或编辑信息。但是,当尝试添加记录时,不在列表中事件会激发,但当它到达DoCmd.RunCommand acCmdSaveRecord时,它会返回到开头并再次启动,不会发生任何事情。如果您回答“否”,则它将最终退出sub,但仅在出现错误3270和错误2237后,然后出现一个框,告诉我文本不在列表中

Private Sub CboBrandCode_NotInList(NewData As String, Response As Integer)
On Error GoTo ErrorCrap
Dim ans As Variant

If NewData = "" Then
    Let ans = MsgBox("The Brand Code cannot be blank!", vbOKOnly)
    Exit Sub
End If

Let ans = MsgBox("Do you want to add the new Brand " & NewData & "?", vbYesNo)

If ans = vbYes Then
    DoCmd.RunCommand acCmdSaveRecord
    Response = acDataErrAdded
ElseIf ans = vbNo Then
    DoCmd.RunCommand acCmdUndo
    Response = acDataErrContinue
End If

Exit Sub

ErrorCrap:
    MsgBox "Error " & Err.Number & ": " & Error$

    Exit Sub

End Sub

您是否尝试过用
Exit Sub
替换
End

问题可能是因为当程序到达
Sub CboBrandCode\u NotInList
中的
Exit Sub
时,它会返回到以前的Sub或函数并重新启动代码,但参数
NewData
Response
现在为空或为空


您是否调用此Sub以期望从中得到结果?如果是,请更改
函数CboBrandCode\u NotInList的名称
Sub CboBrandCode\u NotInList

为什么在“Yes”的情况下有
acCmdSaveRecord
?应该没有必要。在由绑定数据的更改引发的事件期间更改绑定数据通常不是一个好主意-很容易创建循环事件和错误。如果不想保存记录,则无需这样做。这是一条新记录,保存该记录是非常可取的。您的语句听起来好像永远不会对数据进行任何更改或添加。当然,记录需要在某个时候保存。但是如果用户在组合框中输入的值不在其行源中,则会发生
NotInList
事件。这些是独立的事件,您不应该尝试自动链接它们。为什么要将响应变量作为参数?但当vbYes/vbNo时设置此变量。也许你想要的是函数而不是子函数,对吧?