Excel-第一次更改另一个单元格时用日期时间更新列

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")

我希望我的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")
    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中的对应值已被编辑。