VBA有三元运算符吗?

时间:2017-01-11 16:39:25

标签: excel vba excel-vba

我来自Obj C的美丽世界,它基于C编程语言,我爱上了寻找节省空间的古怪方法。但是,我已经查看了尽可能多的文档,我在VBA上找不到任何会缩短语法的东西:

If boolVar = True Then
   'Do something
Else
   'Do nothing
End If

在Obj C中,自然是C,我非常熟悉这样做:

boolVar ? "Nope, tis false" : "Yup, tis true"

这与其他大多数联盟使用的非常类似,有些人可能会使用额外的逻辑运算符,例如!===,但这让我很乐观。我可能没有找到合适的地方,如果是这样的情况请让我知道从哪里获得您的文档。

TLDR,我们可以将If / Then / Else缩短为VBA中的一行代码吗? 这非常方便当'Do Somethings'只不过是设置另一个变量的单个参数,或启用/禁用按钮时。

3 个答案:

答案 0 :(得分:25)

Sub test()

    Dim x As Long
    Dim y As Long
    y = 1
    x = IIf(y = 1, 1, 2)

End Sub

答案 1 :(得分:16)

最近的函数是Iif()

IIf(expr, truepart, falsepart)

但:

  • 你不能让它的分支只是运行代码,而你必须将它的返回值分配给某个变量

  • 它没有短路

    它总是评估两个分支,以便其中一个分支失败,即使不是"真实的"一,该陈述无论如何都会抛出错误

所以类似于的声明是:

If boolVar Then sub1 Else sub2 

其中:

  • boolVar是一个布尔类型变量

  • sub1sub2是两个不同的子/函数

答案 2 :(得分:2)

作为替代方案,您可以在模块中创建以下公共函数:

Public Function iff(expr, trueR, falseR) As Variant
    If expr Then iff = trueR Else iff = falseR
End Function

到目前为止对我有用。