MS Access窗体Equipment组合框设默认值报#Name?错误求助
MS Access 组合框默认值返回#Name?错误修复
问题场景
在MS Access中为窗体控件配置默认值,实现扫描录入数据时自动复用固定字段内容,避免重复输入。
当前窗体共3个组合框控件,ToTech、FromTech两个组合框可在单条记录录入完成后正常保留取值,作为下一条新记录的默认值;仅Equipment组合框持续返回#Name?错误。
已尝试操作:先后将对应绑定字段名从"Type"修改为"Equipment Type"、再调整为"Equipment",均未修复问题。
已知关联信息:存储设备类型的表仅包含EQType字段,该字段已设置为主键。
现有配置
默认值设置VBA代码
Private Sub Serial_Number_AfterUpdate() [Equipment].DefaultValue = [Equipment] [ToTech].DefaultValue = [ToTech] [FromTech].DefaultValue = [FromTech] End Sub
控件与窗体基础配置
- 窗体属性:名为
Transfers的分割窗体(Split form),记录源(Record Source)为Transfers表 - 各控件参数:
Serial Number(文本框):控件来源(Control source)为Serial NumberEquipment(组合框):控件来源为Equipment,行来源(Row Source)为SELECT EQType FROM EquipmentTypes;From Tech(组合框):行来源为SELECT Roster.TechID FROM Roster;To Tech(组合框):行来源为SELECT Roster.TechID FROM Roster;Date Added(文本框):默认值设置为=Date()
错误原因
- DefaultValue属性格式错误:Access中控件的
DefaultValue属性为字符串类型,需要传入合法的表达式格式。ToTech、FromTech绑定的是数字类型的TechID,直接赋值可被解析为合法数字表达式,因此能正常生效;Equipment绑定的是文本类型的设备类型值,未加引号包裹时会被Access识别为对象名引用,找不到对应对象就触发#Name?错误。 - 名称解析歧义:
Equipment组合框的控件名和绑定的字段名完全重名,VBA中直接写[Equipment]时,Access无法明确区分引用的是控件、字段还是其他同名对象,进一步加剧了解析错误。
修复方案
- 替换原有VBA代码为以下版本,按值类型正确拼接默认值表达式,同时用
Me!明确引用当前窗体控件,避免歧义:
Private Sub Serial_Number_AfterUpdate() ' 文本类型值用单引号包裹,同时转义值内可能存在的单引号 Me!Equipment.DefaultValue = "'" & Replace(Me!Equipment.Value, "'", "''") & "'" ' 数字类型ID直接转为字符串赋值,处理空值避免报错 Me!ToTech.DefaultValue = Nz(Me!ToTech.Value, "") Me!FromTech.DefaultValue = Nz(Me!FromTech.Value, "") End Sub
- 如果修改代码后仍存在报错,直接将
Equipment组合框的控件名称修改为cboEquipment,彻底避免控件名和绑定字段名重名导致的解析冲突,同步将代码中对应引用改为Me!cboEquipment即可。 - 额外校验:确认
Transfers表中Equipment字段的类型、长度,和EquipmentTypes表中EQType字段完全一致,避免类型不匹配导致的写入异常。
内容的提问来源于stack exchange,提问作者WMSNewb
相关产品推荐
相关产品推荐

