You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单元格变更时记录日期:如何修改代码将日期固定显示在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:20:56