如果行已更改,请在Excel工作表中添加时间戳

时间:2014-03-21 14:34:09

标签: excel excel-vba timestamp vba

如果行已更改,我需要添加或更新时间戳,以优化工作簿。我正在进行数据导入,但我需要查看哪一行已更新/添加以及哪个日期。

到目前为止,我已找到并调整了以下代码:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    With Target
        If .Count > 1 Then Exit Sub
        If Not Intersect(Range("A2:BL9999"), .Cells) Is Nothing Then
            Application.EnableEvents = False
            With .Cells(1, 65)
                 .NumberFormat = "yyyy.mm.dd"
                 .Value = Now
            End With
            Application.EnableEvents = True
        End If
    End With
End Sub

问题是,时间戳总是相对于已进行更改的行添加+65行,而不是列BM(索引65)。

您能告诉我,我应该使用或更改哪个功能?

2 个答案:

答案 0 :(得分:2)

除了BM列的修复程序更好

  1. 处理可能已更改的所有行,而不是退出withput任何记录
  2. 关闭ScreenUpdating以获得速度
  3. Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng1 As Range
    Dim rng2 As Range
    
    Set rng1 = Intersect(Target, Range("A2:BL9999"))
    If rng1 Is Nothing Then Exit Sub
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
    For Each rng2 In rng1.Cells
        With Cells(rng2.Row, 65)
              .NumberFormat = "yyyy.mm.dd"
               .Value = Now
        End With
    Next
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    
    End Sub
    

答案 1 :(得分:0)

要更改相对于整行的参考,请使用.EntireRow

因此该行应为:With .EntireRow.Cells(1, 65)

请注意,即使使用单行,您仍然可以使用A1样式引用。这可以使您不必计算列数。例如,在这种情况下,.EntireRow.Range("BM1")表示与.EntireRow.Cells(1, 65)完全相同的内容。