Access VBA:更新txtTicket后如何为txtLOS设置正确的Control Source值?
Access VBA:txtTicket AfterUpdate事件中获取对应LOS值的错误修正
你的代码主要有两个核心问题,导致无法得到预期结果:
错误使用ControlSource属性
txtLOS.ControlSource是用来绑定字段或表达式的属性,不是直接设置文本框显示值的方式。要给文本框赋值,应该用txtLOS.Value(可简写为txtLOS)。未处理空值或无效输入
如果txtTicket为空或者输入的不是有效数字,拼接后的DLookup条件会变成[ID] =,直接触发语法错误。
修正后的代码如下:
Private Sub txtTicket_AfterUpdate() Dim tryLOS As Variant ' 先验证输入是否为有效数字,避免类型不匹配 If IsNumeric(Me.txtTicket.Value) Then ' 用Nz处理找不到匹配项的情况,返回空字符串而非Null tryLOS = Nz(DLookup("[LOS]", "[TBL_2025]", "[ID] = " & Me.txtTicket.Value), "") ' 直接给文本框赋值,而非修改ControlSource Me.txtLOS.Value = tryLOS Else ' 输入无效时清空txtLOS Me.txtLOS.Value = "" End If End Sub
额外说明:
- 引用控件时加上
Me.,明确指向当前窗体的控件,避免歧义。 - 自动编号是数字类型,所以条件里不需要加引号;如果是文本类型的ID,才需要用
"[ID] = '" & Me.txtTicket.Value & "'"这种格式。 - 加上
IsNumeric检查,可以避免用户输入非数字内容时触发运行时错误。
内容的提问来源于stack exchange,提问作者Shiela
相关产品推荐
相关产品推荐

