vba - 在 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 中不会短路,这意味着整个表达式都会被计算:当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
推荐阅读
- postgresql - gcp cloud postgresql 一个后端服务无法连接,而其他服务则无法连接
- typescript - 字典的 ts 类验证器
- elasticsearch - ElasticSearch 作为主数据库和其他解决方案
- android - 来自 Google Play 的意图重定向漏洞通知
- javascript - 从具有核心 api 的 reactjs 中的数据库获取国家、州、城市的级联下拉列表
- merge - Optaplanner 从现有结果开始
- c# - Unity:无法修改/向 System.Serializable 中的数组添加值
- tableau-api - 具有行级安全过滤器错误的已发布数据源
- maven - Maven Surefire 插件版本混乱
- python - 如何根据熊猫中的过去值填充n行