Excel - 在第一次更改另一个单元格时更新具有日期时间的列

时间:2013-07-22 17:39:14

标签: excel vba

我希望只有在第一列更改时,我的Excel电子表格列B才会标记日期时间。我看过很多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条记录中的第一条。

2 个答案:

答案 0 :(得分:0)

下面的代码适用于我

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

答案 1 :(得分:-1)

尝试从此行粘贴到A列的多个单元格时收到错误消息:

Target.Offset(0, 1).Value = ""

这是因为Offset是一个多个单元格的范围,我们无法将此范围的Value与单个值进行比较。

您可以查看Target.Rows.Count。如果这大于1,那么您可以遍历Target范围,每次检查相邻单元格是否为空,然后再将值输入Offset(0, 1)

以下循环遍历Target单元格,即使Target是单个单元格也能正常工作:

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栏中的更改)。