.OldValue 属性 在表单的撤消按钮处理程序中给出 运行-时间错误 2448
.OldValue property in Undo button handler of form gives run-time error 2448
这是我的第一个问题,希望我答对了。
我正在进行一个审查员工信息的项目。我使用了两种形式,第一种是 "ReadOnly," 第二种是 "EditOnly."
"ReadOnly" 表单绑定到一个查询,该查询定义要显示的特定记录的条件。
"EditOnly" 表单有一个子表单,绑定到 2 个表(它们也是 "ReadOnly" 表单来源的查询的一部分),具有一对多关系(使用此答案中的信息:
).
"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
这会还原不需要的更改。但是在测试函数时,更改一些数据后我得到 运行-time error 2448。使用 Debug 突出显示此行:
ctlC.Value = ctlC.OldValue
有没有办法让撤消按钮起作用?
错误 2448 是 "Can't assign a value to this object"。
如果您尝试为表单上已读取 only/locked 或已禁用的任何文本框分配值,则会出现此错误。
修改您的代码以检查 ctlc
是否有 Enabled
和 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
调试提示:
您可以通过单步执行或直接写入 window (Debug.Print ctlc.Name
) 来检查 ctlc.Name
的值,以查看哪个文本框是问题的根源。
这是我的第一个问题,希望我答对了。
我正在进行一个审查员工信息的项目。我使用了两种形式,第一种是 "ReadOnly," 第二种是 "EditOnly."
"ReadOnly" 表单绑定到一个查询,该查询定义要显示的特定记录的条件。
"EditOnly" 表单有一个子表单,绑定到 2 个表(它们也是 "ReadOnly" 表单来源的查询的一部分),具有一对多关系(使用此答案中的信息:
"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
这会还原不需要的更改。但是在测试函数时,更改一些数据后我得到 运行-time error 2448。使用 Debug 突出显示此行:
ctlC.Value = ctlC.OldValue
有没有办法让撤消按钮起作用?
错误 2448 是 "Can't assign a value to this object"。
如果您尝试为表单上已读取 only/locked 或已禁用的任何文本框分配值,则会出现此错误。
修改您的代码以检查 ctlc
是否有 Enabled
和 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
调试提示:
您可以通过单步执行或直接写入 window (Debug.Print ctlc.Name
) 来检查 ctlc.Name
的值,以查看哪个文本框是问题的根源。