Does VBA Have a Ternary Operator?

2020-02-10 01:59发布

I come from the beautiful world of Obj C, which is based on the C programming language, and I've fallen in love with finding quirky ways to save space. However, I've looked through as much documentation as I can and I can't find anything juicy on VBA that will shorten this syntax:

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

In Obj C, and naturally C, I'm extremely familiar with doing this:

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

This is very similar to what most other languages use, some may use extra logical operators like != or == but that leaves me optimistic. I may not have looked in the right places, if that's the case PLEASE let me know where you get your documentation.

TLDR, can we shorten If/Then/Else to one line of code in VBA? This is extremely handy when the 'Do Somethings' are nothing more then setting another variable's single parameter, or enabling/disabling a button.

标签: excel vba
3条回答
Lonely孤独者°
2楼-- · 2020-02-10 02:27

the closest function is IIf()

IIf(expr, truepart, falsepart)

but:

  • you can't have its branches simply running code, while you have to assign its return value to some variable,

  • it doesn't short-circuit,

    it always evaluates both branches so that should one of them fail, even if not the "real" one, the statement would throw an error anyway.

So the most resembling statement is:

If boolVar Then sub1 Else sub2 

where:

  • boolVar is a boolean type variable,

  • sub1 and sub2 are two different subs/functions to be called.

查看更多
ゆ 、 Hurt°
3楼-- · 2020-02-10 02:29
Sub test()

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

End Sub
查看更多
一夜七次
4楼-- · 2020-02-10 02:30

As an alternative you can create the following public function in a module:

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

So far works for me.

查看更多
登录 后发表回答