我在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
答案 0 :(得分:3)
问题是您的功能的参数,它们被声明为String
Public Function BarcodeCheck(DBTPART As String, SUPPBC As String)
如果字段DBTPART
和SUPPBC
可以包含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