1

我希望我的 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 条记录中的第 1 条记录中。

4

2 回答 2

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
于 2013-07-22T18:12:49.437 回答
-1

尝试从这一行粘贴到 A 列的多个单元格时,我收到一条错误消息:

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

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

你可以检查一下Target.Rows.Count。如果它大于 1,那么您可以遍历TargetRange,每次在输入值之前检查相邻单元格是否为空Offset(0, 1)

以下循环遍历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 列的更改)。

于 2013-07-22T19:04:27.273 回答