排除macros的第一行

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

macros工作正常,但仍然改变标题。 我尝试了以下内容:

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 

如果您closures事件处理,请提供错误控制,确保事件将被重新启用。

 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就是所有已更改的单元格。 当所有其他东西都接收到时间戳时,您需要防止排在最前面。 当Target不止一个单元格时,您只需要每行一次的时间戳。

而且您不想closures事件处理,然后退出而不再重新打开。

编辑后,ActiveCell可以更改为别的东西,所以使用Target范围而不是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 

我正在使用语法来显示相同​​的行你正在比较是你正在编辑。 如果你愿意的话,你仍然可以把它们放在不同的行上。

另外,Jeeped用户对Application.EnableEvents = True行进行了很好的说明。 如果行是1,它将不会运行,所以它们会无限期地closures。 更好地testing> 1,只在这种情况下运行你的更新代码。