Excel worksheet_change事件

时间:2015-04-05 20:03:15

标签: excel vba excel-vba excel-2010

我想知道你是否可以帮我处理两个不同目标的workheet_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

我在做什么?

2 个答案:

答案 0 :(得分:3)

我认为您对Target所代表的内容感到困惑。 TargetWorksheet_Change事件范围内的已更改

此外,Target.Address从不为" TOTAL",因此此逻辑无效:

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中的目标更改修改该过程以执行任何操作。

答案 1 :(得分:0)

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