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
相关产品推荐
相关产品推荐

