如果更改了多个定义的单元格,请运行Worksheet_Change

时间:2018-08-26 06:45:55

标签: vba excel-vba

我有以下代码,如果定义的命名范围“ 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

感谢您的帮助。预先感谢。

2 个答案:

答案 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中的第一条命令放置)。