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
我该怎么办?
我想你对Target
performance感到困惑。 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列,我RangeB
将RangeB
程序留空。 您可以根据范围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