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

当表中字段为Null时,DLookup与Nz()的正确使用格式是什么?

解决DLookup返回Null导致的运行时错误94问题

这个问题很常见——当DLookup找不到匹配值或者目标字段是Null时,它会直接返回Null,而你把Null赋值给String类型的变量other就会触发错误94(因为String变量不能存储Null值)。Nz()函数确实是解决这个问题的最佳方案,我来帮你理清正确的用法,搞定那些烦人的引号!

方案1:用Nz()直接包裹DLookup(最简洁)

直接把整个DLookup表达式作为Nz()的第一个参数,第二个参数指定当结果为Null时要返回的默认值(比如"NA")。这样other变量永远会拿到一个有效的字符串,不会出现Null:

Dim other As String
' 核心变化:把DLookup整体放入Nz()中,指定Null时返回"NA"
other = Nz(DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]='" & Forms![Press 2]![Containment - Press 2 subform].Form![Part Number] & "'"), "NA")
' 现在直接赋值就行,不用再判断空字符串
Me.[Model].Value = other

为什么这样有效?

Nz()函数的作用就是检查第一个参数是否为Null:如果是,就返回第二个参数的默认值;如果不是,就返回参数本身的值。这样就彻底避免了Null值进入String变量的问题,也省去了后续的判断逻辑。

额外提醒:处理Part Number中的单引号

如果你的Part Number字段值可能包含单引号(比如O'Neil),当前的写法会导致SQL语法错误。这时候需要用Replace()函数把单引号替换成双引号(Access SQL里用两个单引号表示一个转义的单引号):

Dim partNumber As String
Dim other As String

' 先获取Part Number并转义单引号
partNumber = Forms![Press 2]![Containment - Press 2 subform].Form![Part Number]
partNumber = Replace(partNumber, "'", "''")

' 再用转义后的参数执行DLookup+Nz
other = Nz(DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]='" & partNumber & "'"), "NA")
Me.[Model].Value = other

方案2:用Variant变量+IsNull判断(另一种思路)

如果你不想用Nz(),也可以把other定义为Variant类型(Variant可以存储Null值),然后用IsNull()函数判断结果:

Dim other As Variant
other = DLookup("[Model]", "[Part Number & Part Name]", "[Part Number]='" & Forms![Press 2]![Containment - Press 2 subform].Form![Part Number] & "'")

If IsNull(other) Then
    Me.[Model].Value = "NA"
Else
    Me.[Model].Value = other
End If

两种方案都能解决错误94的问题,但方案1更简洁,推荐优先使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:07:33