簡體   English   中英

每當某個單元格發生變化時,創建一個新的日期戳?

[英]Create a new datestamp every time a certain cell changes?

我有一個表示項目狀態的單元格,這種狀態會經常變化。

每當狀態發生變化時,我想要一行來說明狀態改變的時間和新狀態的名稱。

我幾乎沒有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,依此類推。

  1. 如果您只對單元格D4上的Worksheet_Change感興趣,可以使用下面顯示的Intersect方法
  2. 要啟動運行列表,您需要確定Column G中最后使用的單元格並相應地進行偏移

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("D4")) Is Nothing Then
        Dim LR As Long: LR = Range("G" & Rows.Count).End(xlUp).Offset(1).Row
        Target.Offset(LR - Target.Row, 3) = Format(Now(), "YYYY-MM-DD HH:MM:SS")
        Target.Offset(LR - Target.Row, 4) = Target
    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM