这是一个我希望的简单问题.我今天了解了IIf,并希望在某些情况下实现它以节省几行.
IIF(isnumeric(inputs), resume next, call notnum)
这是红色意味着有语法错误,如何解决这个问题?我已经扫描了MSDN这篇文章,所以我不是在这里偷懒.
这不是该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
评估双方的真实和虚假的部分,所以你不会希望有副作用出现.例如,调用以下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
控制流程并不理想.但是当真实结果和错误结果参数是常量表达式时,如果明智地使用它,它可以通过将If...Else...End If
块转换为简单的函数调用来帮助提高代码的可读性.
像所有好东西一样,最好不要滥用它.