Does VBA Have a Ternary Operator?

前端 未结 3 785
感动是毒
感动是毒 2020-12-16 10:13

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 looke

相关标签:
3条回答
  • 2020-12-16 10:51
    Sub test()
    
        Dim x As Long
        Dim y As Long
        y = 1
        x = IIf(y = 1, 1, 2)
    
    End Sub
    
    0 讨论(0)
  • 2020-12-16 10:58

    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.

    0 讨论(0)
  • 2020-12-16 11:01

    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.

    0 讨论(0)
提交回复
热议问题