如果从范围中删除数据,则删除时间戳

Removing timestamp if data is deleted from the range

每次我在 sheet1 上的某个范围内输入数据时,我都会使用这段代码在 sheet2 上获取时间戳。

这很好用,但是,我希望它在删除数据时删除时间戳。如果之前有现有数据,我还希望它返回到以前的时间戳。 请看下面描述它的两个场景。

例如1 我在 sheet1 上输入数量。 I7:1 这会提示代码在 sheet2 上的 E7 中放置时间戳。 如果我在 sheet1 上的 I7 中删除此值,则时间戳将保留在 sheet2 上的 E7 中。如果 Sheet1 的第 7 行没有值,我希望它删除它。

例如2 I7 中有一个来自 26.04.22 的现有值,然后我在 27.04.22 的 J7 中输入另一个值,并将 sheet2 上 E7 中的时间戳更新为 27.04.22。但是,我意识到我犯了一个错误,这不是我想要将这些数据放入的正确单元格。所以我删除了 J7 中的值。执行此操作后,我希望 E7 中的时间戳返回到 26.04.22,显示输入 I7 中的值的时间。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim srg As Range: Set srg = Range("I7:NF1000")
Dim irg As Range: Set irg = Intersect(srg, Target)
If irg Is Nothing Then Exit Sub

Set irg = Intersect(irg.EntireRow, Columns("E"))

Dim TimeStamp As Date: TimeStamp = Now

Dim arg As Range
For Each arg In irg.Areas
    Sheet2.Range(arg.Address).Value = TimeStamp
Next arg

End Sub

以下代码将 add/remove Sheet 2 上的时间戳以比您的原始代码更简单的方式。

您的方案 2 不可行,因为时间戳已被覆盖且无法检索,除非您想构建一个历史值数据库,这将需要更多代码。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")
    If Not Intersect(Target, Range("I7:NF1000")) Is Nothing Then
        For Each rng In Target
            If rng = "" Then
                ws.Range("E" & rng.Row).ClearContents
            Else
                ws.Range("E" & rng.Row) = Now
            End If
        Next rng
    End If
End Sub