使用IIf语法错误

时间:2015-12-10 20:42:18

标签: excel vba excel-vba iif

这是一个我希望的简单问题。我今天了解了IIf,并希望在某些情况下实现它以节省几行。

IIF(isnumeric(inputs), resume next, call notnum)

这是红色意味着有语法错误,如何解决这个问题?我已经扫描了MSDN这篇文章,所以我在这里不是很懒。

3 个答案:

答案 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()是可以的。