Excel 将批量值复制到单元格中时,宏不会更新

Excel 将批量值复制到单元格中时,宏不会更新,excel,vba,Excel,Vba,目前使用微软的宏单元模板,当我一个接一个地将数据输入到B列时,它工作得很好,但当我尝试将数据复制并粘贴到B1:B10时,宏将不会运行,A列也不会更新。另外,如果我想为另一个范围列使用相同的宏,我是否必须使另一个函数完全相同并更改Set KeyCells=range(:),或者我可以在同一个函数中添加条件语句 Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range ' The variable K

目前使用微软的宏单元模板,当我一个接一个地将数据输入到B列时,它工作得很好,但当我尝试将数据复制并粘贴到B1:B10时,宏将不会运行,A列也不会更新。另外,如果我想为另一个范围列使用相同的宏,我是否必须使另一个函数完全相同并更改
Set KeyCells=range(:)
,或者我可以在同一个函数中添加条件语句

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("B1:B1000")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

If Cells(Target.Row, 2).Value = "A" Then
   Cells.(Target.Row, 1).Value = "AA"
End If

If Cells(Target.Row, 2).Value = "B" Then
   Cells.(Target.Row, 1).Value = "BB"
End If



End If
End Sub

循环目标单元格和所需范围的交点

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Intersect(Range("B1:B1000"), Target)

    If Not KeyCells Is Nothing Then
        Dim rng As Range
        For Each rng In KeyCells
            If rng.Value = "A" Then
               rng.Offset(0, -1).Value = "AA"
            ElseIf rng.Value = "B" Then
               rng.Offset(0, -1).Value = "BB"
            End If
        Next rng
    End If
End Sub

您需要在target中的单元格中循环。或者(可能更健壮)在
target
KeyCells
的交叉处循环单元格。注意:
范围(Target.Address)
是冗余的。只要
Target
就足够了。我是vba和excel新手。你能解释一下你的意思吗?我会把我的if语句像这样放在一个for循环中,它应该可以工作吗
对于keycell中的每个myCell
使用偏移量与我像
单元格那样编码(Target.Row,1)相比是否有好处。值=“AA
如果我正确读取偏移量,0是参考点,-1是左边的一列?不是因为你使用的样本量小,而是因为样本量大,是的,它会更快。”。在我的代码中应该是
rng.row
而不是
target.row
。是
(0,-1)
表示同一行,左边一个单元格。感谢您的帮助!如果我想更改另一个列范围,我将如何调整代码?(“C1:C1000”)和(“D1:D1000”)?我可以复制这个函数并改变范围吗