语法错误使用IIf

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

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

这是红色的意思是有一个语法错误,如何解决这个问题? 我已经扫描MSDN文章,所以我不在这里偷懒。

这不是IIf函数的工作原理。

这是一个函数 ,而不是一个声明 :你像使用任何其他函数一样使用它的返回值 – 将它用于控制stream是一个坏主意。

一目了然, IIf有点像三元运算符在其他语言中的工作:

 string result = (foo == 0 ? "Zero" : "NonZero"); 

条件,值如果为真,则值如果为假,并且两个可能的值是相同的types。

这是为了这个:

 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控制stream量不理想的原因。 但是当真实结果假结果参数是常量expression式时 ,如果明智地使用它,则可以通过将If...Else...End If块变成简单的函数调用来帮助提高代码的可读性。

像所有的好东西,最好不要滥用它。

你不能像这样使用iif

这是解决这个问题的一个可能的方法:

 if isnumeric(input) then do something ... else call notnum end if 

IIf返回一个值。 正如Mat's Mug所说的,你可以使用它来把数据交给另一个方法或者函数,但是你不能调用一个没有返回值的过程或函数。 但是,条件的IsNumeric()是可以的。