【问题标题】:Excel Record Date And Time Automatically When Cell Changes VBA当单元格更改VBA时Excel自动记录日期和时间
【发布时间】:2021-10-03 16:04:10
【问题描述】:

当我编辑或更改单元格时,我正在使用以下 VBA 代码自动为日期添加时间戳。但是它工作得很好,每当我删除一行时,它都会导致其正下方的单元格刷新其时间戳,这非常烦人,并导致我隐藏不需要的行而不是删除它们,如果你能通过更改帮助我解决这个问题,我将不胜感激在 VBA 中。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target)
xOffsetColumn = 1
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

【问题讨论】:

  • 如果Target.Columns.Count = Me.Columns.Count,可能会在任何更新之前退出
  • 感谢蒂姆的回复,因为我不是真正的 VBA 专家,所以您可以告诉我在现有代码中的何处添加它。问候。

标签: excel vba excel-2010


【解决方案1】:

您可以忽略涉及整行或多行的更改:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WorkRng As Range, c As Range
    Dim Rng As Range
    Dim xOffsetColumn As Integer
    
    'whole row(s) changed - do not process
    If Target.Columns.Count = Me.Columns.Count Then Exit Sub
    
    Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target)
    xOffsetColumn = 1
    If Not WorkRng Is Nothing Then
        Application.EnableEvents = False
        For Each Rng In WorkRng
            Set c = Rng.Offset(0, xOffsetColumn) '****
            If Not VBA.IsEmpty(Rng.Value) Then
                c.Value = Now
                c.NumberFormat = "dd-mm-yyyy, hh:mm:ss"
            Else
                c.ClearContents
            End If
        Next
        Application.EnableEvents = True
    End If
End Sub

【讨论】:

  • 谢谢蒂姆!你救了我很多心痛。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多