首页 > 解决方案 > VBA:Worksheet_Change - Target.Address 与使用相交

问题描述

我正在成功运行一个包含以下代码的宏:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$1" Or Target.Address = "$B$3" Then
        Call MainSub
    End If
End Sub

这个 sub 的重点是MainSub在 Cell B1 或 B3 更改时通过调用使宏生效。有用。

但是,在寻找有关如何执行此操作的解决方案时,我也遇到了以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("B1")) Is Nothing Then
        Call MainSub
    End If
End Sub

它只适用于 B1。

现在我有两个问题:

1)我将如何包含另一个单元格(B3)以检查相交方法?使用or对我不起作用,所以我认为在第一个 if-Statement 之后的另一个 if-Statement 可以解决问题,但是有没有更优雅的解决方案?

2) 使用intersectvs 简单查看有什么好处Target.Address

标签: excelvba

解决方案


你可以使用:

If Not Intersect(Target, Range("B1,B3")) Is Nothing Then

Intersect很有用,因为它会在更改多个单元格时做出反应。例如,如果用户将数据复制并粘贴到恰好与 B1 和/或 B3 重叠的范围内,Target.Address则不会是$B$1or $B$3,但Intersect仍然可以工作。


推荐阅读