2015-04-05 67 views
1

我想知道你是否可以幫助我與工作表_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 

我該怎麼辦?

回答

3

我認爲你對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

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