我希望这是一个简单的问题。我今天了解了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用于控制流不理想的原因。但是,当true结果和false结果参数是常量表达式时,如果明智地使用它们,则可以通过将If...Else...End If块转换为简单的函数调用来帮助提高代码的可读性。

像所有美好的事物一样,最好不要滥用它。

关于excel - 使用IIf的语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34211344/

10-09 03:31