Excel-第一次更改另一个单元格时用日期时间更新列
我希望我的Excel电子表格B列仅在a列首次更改时加盖日期时间戳。我看过很多VBA代码,但它捕获了最后一次更改,而不是第一次更改 我试着用这个:Excel-第一次更改另一个单元格时用日期时间更新列,excel,vba,Excel,Vba,我希望我的Excel电子表格B列仅在a列首次更改时加盖日期时间戳。我看过很多VBA代码,但它捕获了最后一次更改,而不是第一次更改 我试着用这个: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 And Target.Offset(0, 1).Value = "" Then Target.Offset(0, 1) = Format(Now(), "HH:MM:SS")
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Offset(0, 1).Value = "" Then
Target.Offset(0, 1) = Format(Now(), "HH:MM:SS")
End If
End Sub
它起作用了,但当我复制并粘贴到3行时,日期时间戳只显示在3条记录中的第一条记录上。下面的代码适合我
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target.Column = 1 And Target.Offset(0, 1).Value = "" Then
Target.Offset(0, 1) = Format(Now(), "HH:MM:SS")
End If
Application.EnableEvents = True
End Sub
尝试粘贴到A列的多个单元格时,我收到一条错误消息,来自此行:
Target.Offset(0, 1).Value = ""
这是因为偏移量是多个单元格的范围,我们无法将此范围的值
与单个值进行比较
您可以检查Target.Rows.Count
。如果该值大于1,则可以在目标
范围内循环,每次在偏移量(0,1)
中输入值之前检查相邻单元格是否为空
以下循环通过目标
单元格,即使目标是单个单元格,也可以工作:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
If Target.Column = 1 Then
Application.EnableEvents = False
For Each rng In Target
If rng.Offset(0, 1).Value = "" Then
rng.Offset(0, 1) = Format(Now(), "HH:MM:SS")
End If
Next rng
Application.EnableEvents = True
End If
End Sub
您还应该检查
Target
是否扩展到单个列之外。如果是这样,那么您可能只想在B栏中输入戳记(对于a栏中的更改)。每次打开工作簿后,“第一次更改”是什么意思;总是在B为空时。。。?如果列B中已经存在值,并且某些值被再次粘贴,则此操作不起作用,因为错误处理被禁用,并且忽略了对Value=”“
@AndyG的检查。如果列B中存在值,则表示列A中的对应值已被编辑。