单元格变更时记录日期:如何修改代码将日期固定显示在E列?
解决B列更新时在E列记录日期的VBA修改方案
方法1:修改列偏移量
原代码中xOffsetColumn = 1表示从B列向右偏移1列(即C列)记录日期。要定位到E列,计算B到E的列偏移:B是第2列,E是第5列,偏移量为5-2=3,只需将该行代码修改为:
xOffsetColumn = 3
修改后的完整代码:
Private Sub Worksheet_Change(ByVal Target As Range) 'Update 20140722 Dim WorkRng As Range Dim Rng As Range Dim xOffsetColumn As Integer Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target) xOffsetColumn = 3 ' 修改为3,对应从B列偏移到E列 If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then Rng.Offset(0, xOffsetColumn).Value = Now Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss" Else Rng.Offset(0, xOffsetColumn).ClearContents End If Next Application.EnableEvents = True End If End Sub
方法2:直接指定E列(更推荐)
如果不想依赖偏移量计算,可直接定位到对应行的E列,代码可读性更强,后续维护更直观。修改代码中操作日期单元格的部分:
Private Sub Worksheet_Change(ByVal Target As Range) 'Update 20140722 Dim WorkRng As Range Dim Rng As Range Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target) If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng If Not VBA.IsEmpty(Rng.Value) Then Cells(Rng.Row, "E").Value = Now ' 直接指定E列对应行 Cells(Rng.Row, "E").NumberFormat = "dd-mm-yyyy, hh:mm:ss" Else Cells(Rng.Row, "E").ClearContents End If Next Application.EnableEvents = True End If End Sub
说明
- 方法1通过计算列偏移量实现,适合需要动态调整目标列的场景;
- 方法2直接指定目标列,代码更清晰,避免因列位置变化导致的偏移计算错误。
内容的提问来源于stack exchange,提问作者Black_unicorn
相关产品推荐
相关产品推荐

