Ms access 简单的VBA函数来构建地址

Ms access 简单的VBA函数来构建地址,ms-access,vba,Ms Access,Vba,我想在MS Access中构建一个函数,查看表中的6个字段(名称、地址、城市、州、邮政编码、国家),并将它们像可识别的地址一样显示在一起。这看起来很简单,但我在尝试检查字段中是否有空字段时遇到了麻烦。例如,如果地址字段中没有有效字符串,我希望函数显示“无效地址”。任何帮助都将不胜感激。一段简单的代码如下所示: Function FullAddress(Name As String, Address As String, City As String, State As String, ZIP A

我想在MS Access中构建一个函数,查看表中的6个字段(名称、地址、城市、州、邮政编码、国家),并将它们像可识别的地址一样显示在一起。这看起来很简单,但我在尝试检查字段中是否有空字段时遇到了麻烦。例如,如果地址字段中没有有效字符串,我希望函数显示“无效地址”。任何帮助都将不胜感激。一段简单的代码如下所示:

Function FullAddress(Name As String, Address As String, City As String, State As String, ZIP As String, Country As String)
If Address = "" Or City = "" Or Country = "" Then
    FullAddress = "invalid address"
Else
    FullAddress = Name & vbCrLf & Address & vbCrLf & City & ", " & State & "  " & vbCrLf & Country
End If
End Function
但是,当任何字段为空时,该函数将导致“#错误”


有没有关于我做错了什么的想法?

问题是,当您将这些字段描述为空或空时,它们实际上包含哪些内容。两种可能性是

  • 零长度字符串(
    “”
  • 空的
  • 最有可能的是,第二个原因是你的问题。原因是函数的所有参数都声明为字符串。并且Null不是字符串值

    因此,您可以将声明的数据类型从String更改为Variant,这样函数就可以毫无怨言地接受Null值。但是,您必须修改函数体以适当地处理空值

    或者,在调用函数时,可以将Null字符串转换为零长度字符串。在访问会话中,您可以使用
    Nz
    完成该转换

    FullAddress(新西兰([名称],“”)、新西兰([地址],“”)等)
    
    试试这个:

    Function FullAddress(Name As String, Address As String, City As String, State As String, ZIP As String, Country As String)
    If Nz(Address, "") = "" Or Nz(City, "") = "" Or Nz(Country, "") = "" Then
        FullAddress = "invalid address"
    Else
        FullAddress = Name & vbCrLf & Address & vbCrLf & City & ", " & State & "  " & vbCrLf & Country
    End If
    End Function
    

    由于函数声明包含
    地址作为字符串
    ,这意味着
    地址
    在函数体中永远不能为空。