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

标签 ms-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为Null时,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

最佳答案

我假设当 fieldName 为 null 时,myFunction(fieldName) 会抛出错误。

当您调用 IifIsNull(fieldName, myFunction(fieldName)) 时,首先评估的是 myFunction(fieldName)。因此,如果 fieldName 为 null,则会出现错误。

关于ms-access - 如何在Access 2010 VBA中封装IIF和ISNULL调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11465977/

相关文章:

vba - Excel 2010 VBA 代码未运行

python - 用于在空字段上选择的 Peewee 语法

performance - 为什么 IsNull 比合并(相同查询)慢两倍?

c# - 缺少 AxHost.GetPictureFromIPicture() 方法,正在从 MS Access 数据库中检索图片(附件)

sql - 实现快速用户界面通配 rune 本搜索 (MS Access) 的最佳方法是什么?

ms-access - 表单数据过滤生成 "Could not find field"

sql - 编译错误: Syntax Error MS Access 2013

class - VBA:字典内存问题?填充 dict、.removeall、填充问题

vba - 如何在不调用 _Change 函数的情况下清除用户表单文本框?

mysql - 使用多个 SUM 时遇到除零错误