首页 > 解决方案 > 在 VBA 中是否可以在一个中执行这两个 IF 语句?

问题描述

是否可以在一个中执行以下两个 IF 语句?

If WorksheetFunction.CountIf(Sheets("Config") _
.Range("B3:B8"), .Cells(r - a, 3)) = 1 Or .Cells(r, 3) = "" Then
            
     If .Cells(r, 3).Interior.ColorIndex <> -4142 And _
        .Cells(r, 3).Interior.ColorIndex <> 2 Then
            
               'CONTENT
                
      Else: desired_activity = False
      End If

End If

标签: vba

解决方案


我不会。你越是塞进一个表达式,它失败的原因就越多。所有这些成员调用都有多种原因单独失败;此外,“逻辑”运算符在 VBA 中不会短路,这意味着整个表达式都会被计算:当And运算符的左侧计算为 时False,在计算右侧之前结果不知道。

这意味着 VBA 代码完全有理由避免将条件表达式组合成简洁的单行代码。

但是,是的,有可能使用括号来帮助操作顺序 - 我强烈建议将条件计数拉入它自己的表达式中:

Dim conditionalCount As Long
conditionalCount = WorksheetFunction.CountIf(Sheets("Config").Range("B3:B8"), .Cells(r - a, 3))

If (conditionalCount = 1 Or .Cells(r, 3) = "") And ( _
     .Cells(r, 3).Interior.ColorIndex <> -4142 And _
     .Cells(r, 3).Interior.ColorIndex <> 2) Then

    '...
            
Else

    '...

End If

推荐阅读