Function Access中的自定义函数返回类型转换错误

Function Access中的自定义函数返回类型转换错误,function,ms-access,vba,Function,Ms Access,Vba,我正在Access中创建一个自定义函数,检查两个字段中是否有值,并根据哪个字段有值返回答案 它的一半工作正常,但是在尝试使用自定义函数时,在查询之后我遇到了一个类型转换错误 可以有4个结果,所有结果都返回不同的答案 1) 字段1为空&字段2为空=函数不返回任何内容 2) 字段1为空&字段2有一个值=函数返回文本字符串“Delete” 3) 字段1有一个值&字段2为空=函数返回文本字符串“New” 4) 字段1有一个值&字段2有一个值=检查值是否相同 4a)如果值相同=函数返回文本字符串“匹配”

我正在Access中创建一个自定义函数,检查两个字段中是否有值,并根据哪个字段有值返回答案

它的一半工作正常,但是在尝试使用自定义函数时,在查询之后我遇到了一个类型转换错误

可以有4个结果,所有结果都返回不同的答案

1) 字段1为空&字段2为空=函数不返回任何内容

2) 字段1为空&字段2有一个值=函数返回文本字符串“Delete”

3) 字段1有一个值&字段2为空=函数返回文本字符串“New”

4) 字段1有一个值&字段2有一个值=检查值是否相同

4a)如果值相同=函数返回文本字符串“匹配”

4b)如果值不同=函数返回文本字符串“Update”

我尝试使用case select来确定哪个字段是空的,哪个字段不是空的, 然而,我求助于使用If语句,因为我没有得到我想要的结果

目前,当它比较这两个值并返回“匹配”和“更新”时,有一半有效。 当它需要返回“Delete”或“New”时,有一半不起作用。就好像它无法确定字段是否为空

我尝试使用IsEmpty、IsNull和Field=“”

这是我的密码:

Public Function BarcodeCheck(DBTPART As String, SUPPBC As String)

If IsEmpty(DBTPART) And IsEmpty(SUPPBC) Then
    BarcodeCheck = ""
End If

If IsEmpty(DBTPART) And Not IsEmpty(SUPPBC) Then
    BarcodeCheck = "NEW BC"
End If

If Not IsEmpty(DBTPART) And IsEmpty(SUPPBC) Then
    BarcodeCheck = "DELETE BC"
End If

If Not IsEmpty(DBTPART) And Not IsEmpty(SUPPBC) Then
    If DBTPART = SUPPBC Then
        BarcodeCheck = "MATCH"
    Else
      BarcodeCheck = "UPDATE BC"
    End If
End If

End Function

问题是函数的参数,它们被声明为
String

Public Function BarcodeCheck(DBTPART As String, SUPPBC As String)
如果字段
DBTPART
SUPPBC
可以包含
Null
,则必须将UDF中的参数声明为
变量
。在Visual Basic中,唯一可以包含
Null
的数据类型是
变量。然后在UDF中使用
IsNull()
函数将字段值与
Null
进行比较

因此,当参数的类型为
Variant
时,该函数应该可以工作。(也许您可以使用
If-Then-ElseIf
?)

Public Function BarcodeCheck(DBTPART As Variant, SUPPBC As Variant)

    If IsNull(DBTPART) And IsNull(SUPPBC) Then
        BarcodeCheck = "EMPTY123"

    ElseIf IsNull(DBTPART) And Not IsNull(SUPPBC) Then
        BarcodeCheck = "NEW BC"

    ElseIf Not IsNull(DBTPART) And IsNull(SUPPBC) Then
        BarcodeCheck = "DELETE BC"

    ElseIf Not IsNull(DBTPART) And Not IsNull(SUPPBC) Then
        If DBTPART = SUPPBC Then
            BarcodeCheck = "MATCH"
        Else
          BarcodeCheck = "UPDATE BC"
        End If
    End If

End Function