使用 IIf 的语法错误
Syntax error using IIf
我希望这是一个简单的问题。今天学习了IIf,想在某些情况下实现它以节省几行。
IIF(isnumeric(inputs), resume next, call notnum)
这是红色的,表示存在语法错误,如何解决?我已经扫描了关于此的 MSDN 文章,所以我在这里并不偷懒。
你不能这样使用iif
。
这里有一个可能的解决方法:
if isnumeric(input) then
do something ...
else
call notnum
end if
IIf
函数不是这样工作的。
这是一个函数,而不是语句:你可以像使用任何其他函数一样使用它的return值-用它来控制流程是个坏主意。
乍一看,IIf
的工作方式有点像 三元运算符 在其他语言中的工作方式:
string result = (foo == 0 ? "Zero" : "NonZero");
条件,如果为真则为值,如果为假则为值,并且两个可能的值属于同一类型。
这是为了转动这个:
If foo = 0
Debug.Print "Zero"
Else
Debug.Print "NonZero"
End If
进入这个:
Debug.Print IIf(foo = 0, "Zero", "NonZero")
不过要小心,IIf
评估 both true 和 false 部分,因此您不希望在那里产生副作用。例如,调用下面的 Foo
过程:
Public Sub Foo()
Debug.Print IIf(IsNumeric(42), A, B)
End Sub
Private Function A() As String
Debug.Print "in A"
A = "A"
End Function
Private Function B() As String
Debug.Print "in B"
B = "B"
End Function
此输出结果:
in A
in B
A
这就是为什么使用 IIf
控制流程并不理想。但是当 true result 和 false result 参数是 constant expressions 时,如果使用得当,它会有所帮助通过将 If...Else...End If
块变成简单的函数调用来提高代码的可读性。
就像所有美好的事物一样,最好不要滥用它。
IIf returns 一个值。正如 Mat's Mug 所说,您可以使用它来将数据传递给另一个方法或函数,但您不能调用没有 return 值的过程或函数。
不过,条件的 IsNumeric() 没问题。
我希望这是一个简单的问题。今天学习了IIf,想在某些情况下实现它以节省几行。
IIF(isnumeric(inputs), resume next, call notnum)
这是红色的,表示存在语法错误,如何解决?我已经扫描了关于此的 MSDN 文章,所以我在这里并不偷懒。
你不能这样使用iif
。
这里有一个可能的解决方法:
if isnumeric(input) then
do something ...
else
call notnum
end if
IIf
函数不是这样工作的。
这是一个函数,而不是语句:你可以像使用任何其他函数一样使用它的return值-用它来控制流程是个坏主意。
乍一看,IIf
的工作方式有点像 三元运算符 在其他语言中的工作方式:
string result = (foo == 0 ? "Zero" : "NonZero");
条件,如果为真则为值,如果为假则为值,并且两个可能的值属于同一类型。
这是为了转动这个:
If foo = 0
Debug.Print "Zero"
Else
Debug.Print "NonZero"
End If
进入这个:
Debug.Print IIf(foo = 0, "Zero", "NonZero")
不过要小心,IIf
评估 both true 和 false 部分,因此您不希望在那里产生副作用。例如,调用下面的 Foo
过程:
Public Sub Foo()
Debug.Print IIf(IsNumeric(42), A, B)
End Sub
Private Function A() As String
Debug.Print "in A"
A = "A"
End Function
Private Function B() As String
Debug.Print "in B"
B = "B"
End Function
此输出结果:
in A
in B
A
这就是为什么使用 IIf
控制流程并不理想。但是当 true result 和 false result 参数是 constant expressions 时,如果使用得当,它会有所帮助通过将 If...Else...End If
块变成简单的函数调用来提高代码的可读性。
就像所有美好的事物一样,最好不要滥用它。
IIf returns 一个值。正如 Mat's Mug 所说,您可以使用它来将数据传递给另一个方法或函数,但您不能调用没有 return 值的过程或函数。 不过,条件的 IsNumeric() 没问题。