Function Access中的自定义函数返回类型转换错误
我正在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=“” 这是我的密码: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)如果值相同=函数返回文本字符串“匹配”
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