每次某个单元格更改时创建一个新的日期戳?
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,依此类推。
- 如果您只对单元格
D4
上的 Worksheet_Change
感兴趣,您可以使用下面显示的 Intersect
方法
- 要启动 运行 列表,您需要确定
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
我有一个说明项目状态的单元格,这个状态会经常变化。
每当状态改变时,我想要一行来说明状态改变的时间和新状态的名称。
我几乎没有使用 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
上的Worksheet_Change
感兴趣,您可以使用下面显示的Intersect
方法 - 要启动 运行 列表,您需要确定
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