我有以下代码,如果定义的命名范围“ N”发生变化,则将运行目标搜索。但是,如果几个单元中的任何一个发生更改,我都希望代码能够运行。例如。 “ N1”,“ N2”等。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
If Target.Address = Range("N").Address Then
'Goalseek for force equilibrium
Range("Delta_F").GoalSeek Goal:=0, ChangingCell:=Range("h_neutral")
End If
Application.EnableEvents = True
End Sub
我尝试了以下操作,但是没有用:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
If Target.Address = Range("N, N1, N2").Address Then
'Goalseek for force equilibrium
Range("Delta_F").GoalSeek Goal:=0, ChangingCell:=Range("h_neutral")
End If
Application.EnableEvents = True
End Sub
感谢您的帮助。预先感谢。
答案 0 :(得分:2)
将标准作为Range
测试比将Address
作为字符串测试要容易。
基于@Michal的解决方案,仅当您更改后的单元格(Target
)与您的3个范围(此处设置为变量Intersects
)重叠(TargetRange
)时,以下内容才会执行。主要区别在于测试语句中的双负数,它使您可以避免Exit Sub
导致代码更加简洁。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetRange As Range
Set TargetRange = Union(Range("B3"), Range("G19"), Range("N1"))
If Not Intersect(TargetRange, Target) Is Nothing Then
Application.EnableEvents = False
Range("Delta_F").GoalSeek Goal:=0, ChangingCell:=Range("h_neutral")
Application.EnableEvents = True
End If
End Sub
答案 1 :(得分:0)
您可以使用Intersect
功能轻松检查您的状况:
If Intersect(Range("N"), Target) Is Nothing Then Exit Sub
如果Target
不在您的范围内,它将退出子菜单(此条件应作为Sub
中的第一条命令放置)。