如何在Access 2010 VBA中封装IIF和ISNULL调用?

时间:2012-07-13 07:27:34

标签: ms-access vba access-vba isnull iif

我经常在Access 2010数据库中使用以下表达式模式:

IIF(ISNULL(fieldName), Null, myFunction(fieldName))

这里myFunction是一个用户定义的函数,它将fieldName的值转换为另一种格式(如果它存在)。

为了减少打字,我尝试定义以下功能:

Function IifIsNull(p AS Variant, v AS Variant) AS Variant
    If IsNull(p) Then IifIsNull = p Else IifIsNull = v
End Function

我应该按照以下方式使用它:

IifIsNull(fieldName, myFunction(fieldName))

但它不起作用。当fieldName为空时,IifIsNull的返回值为#Error,而IifIsNull甚至尚未被调用!

是否可以使用用户定义的函数或系统函数来简化给定的代码模式?

更新:

有几个myFunction,所有这些函数目前都是强类型的,一个简单的例子如下:

Function RemoveSpace(str AS String) AS String
    For i=1 to Len(str)
        If Mid(str,i,1) <> " " Then RemoveSpace = RemoveSpace + Mid(str,i,1)
    Next
End Function

2 个答案:

答案 0 :(得分:3)

我认为当myFunction(fieldName)为空时fieldName会抛出错误。

当您致电IifIsNull(fieldName, myFunction(fieldName))时,首先评估的是myFunction(fieldName)。因此,如果fieldName为空,则会出错。

答案 1 :(得分:1)

为什么不简单地评估MyFunction中的fieldname?

将空字符串附加到字段名称以确保它始终传递字符串,而不是空字符。

=MyFunction(FieldName & "")

Function MyFunction(Fieldname) As Variant
   ''Depending on what your function does, it is may not necessary to check
   If FieldName<>"" Then
       MyFunction = FieldName & " was here"
   End If
End Function