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

时间:2014-11-18 22:55:59

标签: vba function ms-access access-vba

我在Access中创建一个自定义函数,它检查2个字段以查看它们中是否有值并根据哪个字段具有值返回答案。

其中一半有效,但在尝试使用自定义函数时,我在查询后遇到类型转换错误。

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

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

2)字段1为空&字段2有一个值=函数返回文本字符串"删除"

3)字段1具有值&字段2为空=函数返回文本字符串"新"

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

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

4b)如果值不同=函数返回文本字符串"更新"

我尝试使用案例选择来确定哪个字段为空以及哪个字段不是, 然而我使用了If语句,因为我没有得到我所追求的结果。

目前正在运行的一半是它比较2个值并返回"匹配"和"更新"。 不起作用的一半是它需要返回"删除"或"新"。它不能确定字段是否为空。

我尝试使用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

1 个答案:

答案 0 :(得分:3)

问题是您的功能的参数,它们被声明为String

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

如果字段DBTPARTSUPPBC可以包含Null,那么您必须将UDF中的参数声明为Variant。在Visual Basic中,唯一可以包含Null的数据类型是Variant。然后在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