Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Excel工作表更改事件_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba Excel工作表更改事件

Vba Excel工作表更改事件,vba,excel,excel-2010,Vba,Excel,Excel 2010,我想知道您是否可以帮助我为两个不同的目标更改工作表 我的代码如下: 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 它正在工

我想知道您是否可以帮助我为两个不同的目标更改工作表

我的代码如下:

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
代表什么感到困惑<代码>目标,在
工作表\u Change
事件的范围内是正在更改的单元格

另外,
Target.Address
从不为“TOTAL”,因此此逻辑将不起作用:

If Target.Address = "TOTAL"
考虑到这一点,我会这样做。为每个范围(a列或B列)创建单独的过程。然后使用
工作表\u 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范围内的目标变化,您可以修改该过程以执行任何您想要的操作。

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

谢谢你的帮助。但我的问题是,我想让它在A列中找到名称“total”,如果它找到了,那么它应该将b列中的同一行复制到一个新的工作表中。似乎你可以使用公式来实现这一点。你为什么要依赖变革事件?