多个if语句条件vba

我对VBA很新,所以需要一点帮助。 我有一个macros(BEM)是依赖于两个单元格的值。 我希望能够运行macros如果这些值中的任何一个被改变。 如果其中任何一个是空白的,我需要代码不做任何事情,直到在两个单元格中input一个值。

这是我迄今为止,但似乎没有工作:

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 

testing多个范围时,可以使用If Not Intersect(Target, Range("B3:B4")) Is Nothing

而不是检查每个单元格,如果IsEmptyNot ,您可以使用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 

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