错误 2115:宏/函数设置为 BeforeUpdate/ValidationRule 阻止 {pgm} 在字段中保存数据

mwo*_*e02 3 ms-access vba

我有一个带有子表单的绑定表单。当我更改主窗体然后单击子窗体时,出现以下错误:

设置为该字段的 BeforeUpdate 或 ValidationRule 属性的宏或函数阻止 {program name} 保存该字段中的数据。

  • 如果这是一个宏,请在“宏”窗口中打开该宏并删除强制保存的操作(例如,GoToControl)。
  • 如果宏包含 SetValue 操作,请将宏设置为控件的 AfterUpdate 属性。
  • 如果这是一个函数,请在“模块”窗口中重新定义该函数。

如果我在主窗体上进行更改,然后单击记录选择器框或按Shift+Enter保存,然后单击子窗体我没有收到错误消息。

mwo*_*e02 5

原来,罪魁祸首是一个电话DoEventsForm_BeforeUpdate过程。最简单的解决方案是删除对DoEvents.

在我的特殊情况下,对 的调用DoEvents深埋在调用堆栈中,因此请务必遵循所有代码路径或仅对DoEvents.


要重现此错误:

  1. 创建一个新表单
  2. 为表单指定一个 RecordSource(即,使其成为绑定表单)
  3. 添加子窗体控件(注意:不需要为子窗体控件分配一个SourceObject)
  4. 将 Form BeforeUpdate 属性设置为 [Event Procedure]
  5. 将以下代码添加到表单的代码模块中:

    Private Sub Form_BeforeUpdate(Cancel As Integer)
        DoEvents
    End Sub
    
    Run Code Online (Sandbox Code Playgroud)
  6. 更改主窗体上的数据
  7. 直接点击子窗体控件
  8. 接收问题中指出的错误消息