使用 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 then
和 else
根据测试表达式的结果返回适当值之前的参数,这有时会导致不希望的结果。
例如,在立即数 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)
假设我有以下 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 then
和 else
根据测试表达式的结果返回适当值之前的参数,这有时会导致不希望的结果。
例如,在立即数 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)