使用DLookup从表查询InputBox输入内容并返回至MsgBox时遇NULL错误
Access VBA DLookup返回NULL的解决办法
需求是通过InputBox获取用户输入的编号,从名为Names的表中查询对应姓名并显示在MsgBox中。表结构如下:
| Column A | Column B |
|---|---|
| 10001 | Adam |
| 10002 | Eva |
以下两种代码尝试运行后均返回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
相关产品推荐
相关产品推荐

