Excel VBA静态时间戳在Worksheet_Change事件中

我正在创build一个日志,当数据最初input到单元格C中时,它将自动将时间戳填充到单元格D中。不幸的是,我碰到了一堵墙。

  • 当我在单元格C中input数据时,我可以在单元格D中获得时间戳记,但是如果对单元格C做任何更改,则时间戳记将再次更新。

  • 我需要使它的function,以便时间戳将只在单元格D中更改,如果单元格C是空白的。

  • 如果数据已经被input到单元格C中,并且时间戳已经被加载到单元格D中,并且需要修改单元格C中的内容,我不希望时间戳单元格D发生更改。

希望是有道理的。 VBA代码如下:

Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim rCell As Range Dim rChange As Range On Error GoTo ErrHandler Set rChange = Intersect(Target, Range("C:C")) If Not rChange Is Nothing Then Application.EnableEvents = False For Each rCell In rChange If rCell > "" Then With rCell.Offset(0, 1) .Value = Now .NumberFormat = "hh:mm:ss AM/PM mm/dd/yyyy" End With Else rCell.Offset(0, 1).ClearContents End If Next End If ExitHandler: Set rCell = Nothing Set rChange = Nothing Application.EnableEvents = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub 

任何指导将不胜感激。

如果在列C中input值时没有一个时间戳记,则下面的时间戳记放入D列。如果C列中的值被清除,D列中的任何现有时间戳记也被清除。 如果对列C中的条目进行了编辑,则不会更改现有的时间戳。

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Columns("C"), Target.Parent.UsedRange) Is Nothing Then On Error GoTo Safe_Exit Application.EnableEvents = False Dim rng As Range For Each rng In Intersect(Target, Columns("C"), Target.Parent.UsedRange) If CBool(Len(rng.Value2)) And Not CBool(Len(rng.Offset(0, 1).Value2)) Then rng.Offset(0, 1) = Now ElseIf Not CBool(Len(rng.Value2)) And CBool(Len(rng.Offset(0, 1).Value2)) Then rng.Offset(0, 1) = vbNullString End If Next rng End If Safe_Exit: Application.EnableEvents = True End Sub 

这个例程将处理多个单元格作为目标; 通常在将多行数据粘贴到C列时进一步限制交集到工作表的UsedRange属性,以便在执行像行删除之类的操作时将处理最小化。

看起来很简单。 我错过了什么吗? 在更新之前,请检查以确保单元格是空白的。

 With rCell.Offset(0, 1) If .Value <> "" Then .Value = Now .NumberFormat = "hh:mm:ss AM/PM mm/dd/yyyy" End If End With