表单的撤消按钮处理程序中的.OldValue属性给出了运行时错误2448

时间:2017-12-04 15:24:56

标签: vba ms-access access-vba ms-access-2010

这是我的第一个问题,所以我希望我做对了。

我正在研究审核员工信息的项目。我使用两种形式,第一种是“ReadOnly”,第二种是“EditOnly”。

“ReadOnly”表单绑定到查询,该查询定义要显示的特定记录的条件。

“EditOnly”表单有一个子表单,绑定到2个表(它们也是“ReadOnly”表单源的查询的一部分),它具有1对多关系(使用此信息)回答: Error 3251 on .oldValue control property)。

“EditOnly”表单通过按钮打开,用于编辑特定员工的数据。在这种形式中,我有一个 Undo 按钮,使用以下代码:

Sub UndoEdits()
  If Me.Dirty Then
    Me!btnUndo.Enabled = True
  Else
    Me!btnUndo.Enabled = False
  End If
End Sub

Sub btnUndo Click()
  Dim ctlC As Control
  For Each ctlC in Me.Controls
    If ctlC.ControlType = acTextBox Then
      ctlC.Value = ctlC.OldValue
    End If
  Next ctlC
End Sub

可以还原不需要的更改。但是在测试函数时,在更改了一些数据后,我得到了运行时错误2448.使用Debug突出显示了这一行:

ctlC.Value = ctlC.OldValue

有没有办法让 Undo 按钮有效?

1 个答案:

答案 0 :(得分:0)

错误2448是"无法为此对象分配值"。

如果您尝试为表单上任何只读/锁定或禁用的文本框分配值,则会出现此错误。

修改您的代码以检查ctlcEnabled的{​​{1}},并跳过任何不可分配的控件,如下所示:

Locked

调试提示:

您可以通过步进或写入即时窗口( Dim ctlC As Control For Each ctlC in Me.Controls If ctlC.ControlType = acTextBox Then If ctlC.Enabled And Not ctlC.Locked Then ctlC.Value = ctlC.OldValue End If End If Next ctlC )来检查ctlc.Name的值,以查看哪个文本框是问题的根源。