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

时间:2014-08-18 15:39:39

标签: vba ms-access access-vba

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

  

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

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

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

1 个答案:

答案 0 :(得分:2)

事实证明,罪魁祸首是在DoEvents程序中调用Form_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
    
  6. 更改主窗体上的数据
  7. 直接点击子窗体控件
  8. 收到问题中提到的错误消息