Excel worksheet_change事件

我想知道如果你能帮助我的工作表_Change两个不同的目标。

我的代码如下:

Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:A50")) Is Nothing Then Exit Sub Range("A1:A50").Copy ThisWorkbook.Sheets(2).Range("B1") End Sub 

而且它正在工作,只要在列A中更新了任何列,它将被更新并复制到列B(工作表2)中。 现在我遇到的问题是我想要添加另一个目标,B1:B50,并且只有如果该目标有它的字SUM,它应该复制和更新。 问题是,它是复制,但不更新任何东西。 我的代码是:

 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:A50, B1:B50")) Is Nothing Then Exit Sub If Target.Address = "TOTAL" Then Range("A1:A50").Copy ThisWorkbook.Sheets(2).Range("B1") end if End Sub 

我该怎么办?

我想你对Targetperformance感到困惑。 Target ,在Worksheet_Change事件的范围内是被更改的单元格。

而且, Target.Address 永远不会是“TOTAL”,所以这个逻辑将不起作用:

 If Target.Address = "TOTAL" 

考虑到这一点,我会做这样的事情。 为每个范围(列A或B)创build一个单独的过程。 然后使用Worksheet_Change事件来确定要调用哪个过程:

 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:A50, B1:B50")) Is Nothing Then Exit Sub If Target.Column = 1 Then Call RangeA(Target) If Target.Column = 2 Then Call RangeB(Target) End Sub Sub RangeA(Target as Range) Range("A1:A50").Copy ThisWorkbook.Sheets(2).Range("B1") End Sub Sub RangeB(Target As Range) 'Here, you put the code that you want to run when Target is in column B End Sub 

由于我不完全确定你打算如何处理B列,我RangeBRangeB程序留空。 您可以根据范围B1:B50中的目标更改来修改该过程以执行任何您想要的操作。

B列如何填充?

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A1:A50")) Is Nothing Then Range("A1:A50").Copy ThisWorkbook.Sheets(2).Range("B1") End If If Not Intersect(Target, Range("B1:B50")) Is Nothing Then If Target = "Total" Then MsgBox Target.Address 'do something here End If End If End Sub