使用 IF 语句作为参数调用 Access VBA 函数

Calling an Access VBA function with IF statement as an argument

假设我有以下 MS Access 2016 函数:

Public Function TestFunction(ByVal strTest As String) As String

有没有一种方法可以使用类似于以下内容的函数来调用函数:

strReturn = TestFunction(If a = 1 Then "Apple" Else "Orange")

我想写的尽量紧凑,避免为调用写多行,例如:

If a = 1 Then strArg = "Apple" Else strArg = Orange
strReturn = TestFunction(strArg)

您可以使用 IIf 完成此操作,例如:

strReturn = TestFunction(IIf(a=1,"Apple","Orange"))

但是在使用常量以外的表达式时通常不鼓励这样做,因为 IIf 将始终评估 both thenelse根据测试表达式的结果返回适当值之前的参数,这有时会导致不希望的结果。

例如,在立即数 Window (Ctrl+G) 计算以下表达式将导致除法零错误,即使永远不会返回 else 表达式:

?iif(true,"Apple",1/0)

如果 a 的值来自明确定义的范围,那么解决方案是对非连续明确定义的范围使用 Choose Function for a contiguous range or Switch 函数。

当然,更成熟的解决方案是用字典替换 Choose 或 Switch。

为什么不是这样的多种可能性

Dim myArg as String

Select Case a
    Case 1: myArg = "Apple"
    Case 2: myArg = "Orange"
    Case 3: myArg = "Pear"
   'etc.
End Select

strReturn = TestFunction(myArg)