按Val更改,目标范围未被识别

时间:2013-06-17 23:19:25

标签: excel function target offset byval

Cells(R, DataCol).Resize(, ColumnCount).Copy
Cells(R, DataCol).Offset(RowOffset * (R - StartRow), ColOffset).PasteSpecial xlValues

嘿所有,当我使用从模块运行的上述代码时,它会触发工作表中写入的val更改

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 15 Then
  Target.Offset(0, 1).Value = Now()
  End If
End Sub

现在,代码的Cells部分正在将一个包含四个单元格的块复制到第12列,直到第15列,但更改值没有将第15列识别为具有更改的值。但是,当我将目标列更改为11时,

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 11 Then
   Target.Offset(0, 1).Value = Now()
   End If
End Sub  

为整个单元格块更改了值,因此进行了四次目标更改。

感谢。

1 个答案:

答案 0 :(得分:0)

如何处理Target以涵盖范围内的> 1个单元格:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c as Range

For each c in Target.cells
    If c.Column = 11 Then
       c.Offset(0, 1).Value = Now()
    End If
Next c

End Sub  

或:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng as Range

Set rng = Application.Intersect(Target, Me.Columns(11))
If not rng is nothing then
    rng.Offset(0, 1).Value = Now()
End If

End Sub 

在更改电子表格之前禁用事件也是一个好主意(否则您只需通过更新重新触发事件)。使用

 Application.EnableEvents=False 

然后在完成后重新设置为True(不要忘记那部分!)