Excel 每次特定单元格更改时创建新的日期戳?

Excel 每次特定单元格更改时创建新的日期戳?,excel,vba,datestamp,Excel,Vba,Datestamp,我有一个表示项目状态的单元格,该状态将经常更改 每当状态发生更改时,我都希望有一行来说明状态更改的时间和新状态的名称 我几乎没有VBA方面的经验,因此非常感谢您的帮助。到目前为止,我有: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 And Target.Row = 4 Then Target.Offset(10, 3) = Format(Now(), "YYYY-MM

我有一个表示项目状态的单元格,该状态将经常更改

每当状态发生更改时,我都希望有一行来说明状态更改的时间和新状态的名称

我几乎没有VBA方面的经验,因此非常感谢您的帮助。到目前为止,我有:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column = 4 And Target.Row = 4 Then

        Target.Offset(10, 3) = Format(Now(), "YYYY-MM-DD HH:MM:SS")

    End If

End Sub
每当单元格D4中包含的状态发生变化时,此代码成功地在单元格G7中列出时间,但它总是重新填充同一单元格,我希望每个连续的状态变化都在单元格G8、G9、G10中列出日期戳,依此类推

它也没有列出状态单元格D4发生了什么变化,理想情况下,我希望它在F7、F8、F9中列出,依此类推

  • 如果您只对单元格
    D4
    上的
    工作表更改感兴趣,可以使用下面显示的
    相交
    方法
  • 要启动运行列表,您需要确定G列中最后使用的单元格,并相应地进行偏移

  • 请试试这个

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Const Tgt As String = "D4"              ' monitored cell
        Const FirstRecord As Long = 7           ' change as required
        Const Fmt As String = "yyyy-mm-dd hh:mm:ss"
    
        Dim Rl As Long                          ' last used row
    
        If Target.Address = Range(Tgt).Address Then
            Application.EnableEvents = False
            Rl = Application.WorksheetFunction.Max( _
                 Cells(Rows.Count, "F").End(xlUp).Row + 1, FirstRecord)
            With Cells(Rl, "G")
                .Value = Now()
                .NumberFormat = Fmt
                Target.Copy Destination:=.Offset(0, -1)
            End With
            Application.EnableEvents = True
        End If
    End Sub
    

    哇,真是太棒了,太谢谢你了!非常感谢!
    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Const Tgt As String = "D4"              ' monitored cell
        Const FirstRecord As Long = 7           ' change as required
        Const Fmt As String = "yyyy-mm-dd hh:mm:ss"
    
        Dim Rl As Long                          ' last used row
    
        If Target.Address = Range(Tgt).Address Then
            Application.EnableEvents = False
            Rl = Application.WorksheetFunction.Max( _
                 Cells(Rows.Count, "F").End(xlUp).Row + 1, FirstRecord)
            With Cells(Rl, "G")
                .Value = Now()
                .NumberFormat = Fmt
                Target.Copy Destination:=.Offset(0, -1)
            End With
            Application.EnableEvents = True
        End If
    End Sub