You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access VBA报错:无法为此对象赋值,如何实现动态重新赋值?

Access VBA 赋值错误问题解决

错误原因分析

首次运行正常但修改字段后报错“Can't assign a value to this object”,核心原因是:
运行qryDelect Record from tblPNChange后,表单绑定的当前记录被从底层表tblPNChange中删除。再次执行代码时,表单控件指向的是已删除的无效记录,无法对其字段赋值。

解决方案

1. 确保赋值前表单有有效记录

如果业务逻辑是每次操作都创建新记录,可在赋值前主动切换到新记录:

' 在代码开头添加
If Not Me.NewRecord Then
    DoCmd.GoToRecord , , acNewRec
End If

' 原赋值代码
Me.PCN = Me.txt_PCN.Value
Me.OldPN = Me.txt_oldPN.Value
Me.Qty_Change = Me.TXT_QTY.Value
Me.NewPart = Me.txt_PN_TO.Value

' 后续保存及查询执行代码...

2. 删除记录后重置表单状态

在执行删除查询后,立即将表单切换到新记录,避免下次操作时指向无效记录:

DoCmd.OpenQuery "qryDelect Record from tblPNChange", acViewNormal, acEdit
' 添加以下代码重置表单
DoCmd.GoToRecord , , acNewRec
DoCmd.SetWarnings True
MsgBox "Transfer Completed"

3. 使用Recordset对象操作记录(更稳健)

直接通过DAO记录集操作字段,避免依赖表单控件的绑定状态:

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

' 添加新记录
rs.AddNew
rs!PCN = Me.txt_PCN.Value
rs!OldPN = Me.txt_oldPN.Value
rs!Qty_Change = Me.TXT_QTY.Value
rs!NewPart = Me.txt_PN_TO.Value
rs.Update

' 同步表单到新记录
Me.Bookmark = rs.Bookmark
DoCmd.RunCommand acCmdSaveRecord

' 执行后续查询...
rs.Close
Set rs = Nothing

4. 检查控件绑定有效性

确认Me.PCN、Me.OldPN等控件确实绑定到tblPNChange的对应字段。若控件未绑定,不会出现此错误;若绑定错误,需重新设置控件的ControlSource属性。

关于DoCmd.DeleteObject的错误

你尝试用DoCmd.DeleteObject时出现的错误,大概率是因为试图删除正在使用的表单或控件(这些对象处于打开状态时无法删除)。此操作在当前业务逻辑中并非必要,解决上述记录状态问题即可。

内容的提问来源于stack exchange,提问作者ZenHombre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:22:41