Excel工作表_事件

问题描述:

我想知道你是否可以帮助我与工作表_Change两个不同的目标。Excel工作表_事件

MY代码如下:

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 

它正在工作,每当anytjing在列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代表什么感到困惑。 Target,在Worksheet_Change事件的范围内的单元格是已更改

此外,Target.Address永远是“总”,所以这个逻辑是行不通的:

If Target.Address = "TOTAL" 

考虑到这一点,我会做这样的事情。为每个范围(列A或B)创建一个单独的过程。然后使用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程序空的现在。根据范围B1:B50中的目标更改,您可以修改该过程以执行任何您想要的操作。

+0

谢谢你的帮助。但我的问题是,我希望它在列A中找到名称“total”,如果它确实如此,它应该将列b中的同一行复制到新表中。 – jumbli 2015-04-07 06:54:07

+0

看来你可以用公式来做到这一点。你为什么依靠Change事件? – 2015-04-07 12:23:01

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