【问题标题】: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