Excel 按Val更改,未识别目标作为范围

Excel 按Val更改,未识别目标作为范围,excel,function,target,offset,byval,Excel,Function,Target,Offset,Byval,嘿,当我使用从模块运行的上述代码时,它会触发工作表中编写的val所做的更改 Cells(R, DataCol).Resize(, ColumnCount).Copy Cells(R, DataCol).Offset(RowOffset * (R - StartRow), ColOffset).PasteSpecial xlValues 现在,代码的Cells部分将一个由四个单元格组成的块复制到第12列,直到第15列,但是change val没有将第15列识别为具有已更改的值。但是,当我将目标列

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

Cells(R, DataCol).Resize(, ColumnCount).Copy
Cells(R, DataCol).Offset(RowOffset * (R - StartRow), ColOffset).PasteSpecial xlValues
现在,代码的Cells部分将一个由四个单元格组成的块复制到第12列,直到第15列,但是change val没有将第15列识别为具有已更改的值。但是,当我将目标列更改为11时

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 15 Then
  Target.Offset(0, 1).Value = Now()
  End If
End Sub
更改整个单元格块的值,以便进行四次目标更改


谢谢。

如何处理目标以占范围内的>1个单元格:

Private Sub Worksheet_Change(ByVal Target As Range)

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

另外,在从Change sub更新电子表格之前禁用事件也是一个好主意(否则,您只需使用更新重新触发事件)。使用


然后在完成后将其设置为True(不要忘记这一部分!)

目标可以是一个多单元格范围,因此您需要在代码中考虑到这一点。@tim是的,这是一个多单元格范围,我如何在代码中考虑到这一点?我使用了第一种方法“Dim C as range”&它非常有效。我试图理解其中的机制——似乎当你循环“for each c”时,它只是将日期重写到同一个单元格,而不是将日期写入四个单独的单元格?它只是跳过了第11列以外的所有更改的单元格。在原始代码中,您检查了
Target.Column
:如果目标是多单元格范围,则
。Column
只检查该范围的左上角单元格,并仅返回该单元格的列。明白了,谢谢。我贴了另一个帖子,上面写着“如果c.Value为空或c.Value=0,那么如果”我试图添加忽略任何空白单元格和0值单元格。但是我写的代码不起作用
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