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

使用DLookup从表查询InputBox输入内容并返回至MsgBox时遇NULL错误

Access VBA DLookup返回NULL的解决办法

需求是通过InputBox获取用户输入的编号,从名为Names的表中查询对应姓名并显示在MsgBox中。表结构如下:

Column AColumn B
10001Adam
10002Eva

以下两种代码尝试运行后均返回NULL:

原代码1(用户输入版)

Private Sub Clientnr_GotFocus()
    DoCmd.RefreshRecord
    
    Dim sr As String

    sr = InputBox("Enter a number:", "Search number")
    X = DLookup("Column B", "Names", "Column A =" & sr)
    MsgBox X, vbOKOnly
    
End Sub

原代码2(硬编码测试版)

Private Sub Clientnr_GotFocus()
    DoCmd.RefreshRecord
    
    Dim sr As String

    sr = 10001
    X = DLookup("Column B", "Names", "Column A =" & sr)
    MsgBox X, vbOKOnly
    
End Sub

问题原因

核心问题是字段名包含空格,Access SQL中带空格的标识符必须用方括号[]包裹,否则无法正确识别字段。原代码直接使用"Column B"和"Column A",Access无法解析这些字段名,导致查询无结果返回NULL。

此外,如果Column A是文本类型,查询条件中的值需要额外用单引号包裹;如果是数字类型则不需要,但字段名的问题是首要解决项。


修正后的代码

情况1:Column A为数字类型

Private Sub Clientnr_GotFocus()
    DoCmd.RefreshRecord
    
    Dim sr As String
    Dim userName As Variant '用Variant接收可能的NULL值

    sr = InputBox("Enter a number:", "Search number")
    '字段名加方括号,确保Access正确识别
    userName = DLookup("[Column B]", "Names", "[Column A] = " & sr)
    
    '处理查询结果为NULL的情况
    If IsNull(userName) Then
        MsgBox "未找到对应编号的姓名", vbExclamation, "查询结果"
    Else
        MsgBox userName, vbOKOnly, "查询结果"
    End If
End Sub

情况2:Column A为文本类型

如果Column A存储的是文本格式的编号,需要给查询值加单引号:

Private Sub Clientnr_GotFocus()
    DoCmd.RefreshRecord
    
    Dim sr As String
    Dim userName As Variant

    sr = InputBox("Enter a number:", "Search number")
    '文本类型值需用单引号包裹
    userName = DLookup("[Column B]", "Names", "[Column A] = '" & sr & "'")
    
    If IsNull(userName) Then
        MsgBox "未找到对应编号的姓名", vbExclamation, "查询结果"
    Else
        MsgBox userName, vbOKOnly, "查询结果"
    End If
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:37:30