我有一个宏,可以在编辑任何行时将当前时间放入一个单元格中。我的问题是这个宏也为标题的第 1 行执行。所以它最终将列的标题更改为时间。

宏工作正常,但仍会更改标题。我尝试了以下方法:

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False

    If ActiveCell.Row = 1 Then Exit Sub

    Cells(Target.Row, "I").Value = Now
    Application.EnableEvents = True

End Sub

最佳答案

如果关闭事件处理,请提供错误控制以确保重新启用事件。

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Safe_Exit
    Application.EnableEvents = False
    Dim r As Long, rw As Long, rng As Range, newTarget As Range
    For Each rng In Target
        If rng.Column <> 9 Then
            If newTarget Is Nothing Then
                Set newTarget = rng
            Else
                Set newTarget = Union(newTarget, rng)
            End If
        End If
    Next rng
    For r = 1 To newTarget.Rows.Count
        rw = newTarget.Rows(r).Row
        If rw > 1 Then _
            Cells(rw, "I").Value = Now
    Next r

Safe_Exit:
    Application.EnableEvents = True
End Sub

如果您要粘贴或填充大量值,则目标是所有更改的单元格。当其他所有内容都收到时间戳时,您需要防范顶行。当 Target 不止一个单元格时,您只想为每行添加一次时间戳。

并且您不想关闭事件处理然后退出而不重新打开它。

10-08 13:13