【问题标题】:multiple if statement conditions vba多个if语句条件vba
【发布时间】:2017-09-25 15:59:28
【问题描述】:

我对 VBA 很陌生,所以需要一点帮助。我有一个取决于两个单元格值的宏(BEM)。如果其中任何一个值发生更改,我希望能够运行宏。如果其中任何一个为空白,则在两个单元格中都输入值之前,我需要代码什么都不做。

这是我目前所拥有的,但它似乎不起作用:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$3" Or Target.Address = "$B$4" And (IsEmpty(Range("B3").Value) Or IsEmpty(Range("B4").Value)) Then
        Exit Sub
    Else
        BEM
    End If
End Sub

【问题讨论】:

标签: vba excel if-statement multiple-conditions


【解决方案1】:

and 运算符的优先级高于 or 运算符,因此当前格式的 if 条件被解释为:

If Target.Address = "$B$3" Or (Target.Address = "$B$4" And (IsEmpty(Range("B3").Value)) Or IsEmpty(Range("B4").Value)) Then

但是你想满足or条件:

If (Target.Address = "$B$3" Or Target.Address = "$B$4") And ((IsEmpty(Range("B3").Value) Or IsEmpty(Range("B4").Value))) Then

【讨论】:

    【解决方案2】:

    在测试多个 Range 时,可以使用If Not Intersect(Target, Range("B3:B4")) Is Nothing

    而不是检查每个单元格是IsEmpty 还是Not,您可以将WorksheetFunction.CountA 用于整个范围,在您的情况下,您的范围由2 个单元格组成,因此您要检查WorksheetFunction.CountA("YourRange") = 2

    代码

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target, Range("B3:B4")) Is Nothing And WorksheetFunction.CountA(Range("B3:B4")) = 2 Then
        BEM
    End If
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2016-04-25
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 2014-09-06
      相关资源
      最近更新 更多