我有一个宏,可以在编辑任何行时将当前时间放入一个单元格中。我的问题是这个宏也为标题的第 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
Run Code Online (Sandbox Code Playgroud)
编辑后 ActiveCell 可以更改为其他内容,因此请使用目标范围而不是 ActiveCell。例如,如果我点击 {enter} 来完成我的编辑,则 ActiveCell 现在位于第 2 行而不是第 1 行。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Row > 1 Then
Cells(.Row, "I").Value = Now
End If
End With
Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)
我正在使用 With 语法来显示您正在比较的同一行是您正在编辑的行。如果您愿意,您仍然可以将它们放在不同的行中。
此外,用户 Jeeped 对 Application.EnableEvents = True 行提出了很好的观点。如果行为 1,它不会运行,因此它们会无限期地关闭。最好测试 > 1 并仅在该条件下运行更新代码。