我有一个宏,可以在编辑任何行时将当前时间放入一个单元格中。我的问题是这个宏也为标题的第 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 不止一个单元格时,您只想为每行添加一次时间戳。
并且您不想关闭事件处理然后退出而不重新打开它。