这是一个我希望的简单问题。我今天了解了IIf,并希望在某些情况下实现它以节省几行。
IIF(isnumeric(inputs), resume next, call notnum)
这是红色意味着有语法错误,如何解决这个问题?我已经扫描了MSDN这篇文章,所以我在这里不是很懒。
答案 0 :(得分:9)
IIf
功能不起作用。
它是函数,而不是语句:你使用它的返回值就像你使用任何其他函数一样 - 将它用于控制流是一个坏主意
乍一看,IIf
有点像三元运算符在其他语言中的作用:
string result = (foo == 0 ? "Zero" : "NonZero");
条件,值为true,值为false,两个可能的值属于同一类型。
这是为了解决这个问题:
If foo = 0
Debug.Print "Zero"
Else
Debug.Print "NonZero"
End If
进入这个:
Debug.Print IIf(foo = 0, "Zero", "NonZero")
但请注意,IIf
评估 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结果和 false结果参数是常量表达式时,如果明智地使用它,它可以帮助提高代码的可读性将If...Else...End If
块转换为简单的函数调用。
像所有好事一样,最好不要滥用它。
答案 1 :(得分:3)
您不能像这样使用iif
。
以下是解决此问题的可行方法:
if isnumeric(input) then
do something ...
else
call notnum
end if
答案 2 :(得分:0)
IIf返回一个值。正如Mat's Mug所说,你可以使用它来将数据传递给另一种方法或函数,但是你不能调用没有返回值的过程或函数。 但是条件的IsNumeric()是可以的。