问与答70: 如何记录指定单元格每次修改的时间?
- 2019 年 11 月 11 日
- 筆記
Q:我想要在用户修改工作表指定单元格的内容时,在另一工作表中记录修改的时间。例如,在工作表Sheet1的单元格B2中,每次用户将该单元格值修改为某一大于0的数值时,则在工作表LogB2中记录下其修改的时间。
具体地说,如果在2019年10月24日19时30分30秒,用户将单元格B2中的值修改为280,那么在工作表LogB2中记录下时间2019-10-24 19:30:30;如果在2019年10月25日8时10分15秒又将单元格B2中的值修改为100,那么工作表LogB2中增加一条时间记录2019-10-25 8:10:15。
A:这可以使用工作表事件来完成。
打开VBE,双击工作表Sheet1对象模块,输入代码:
Private Sub Worksheet_Change(ByVal Target As Range) Dim rngInput As Range Dim rngLog As Range '要记录其修改时间的单元格 Set rngInput = Range("B2") '确定单元格是目标单元格 If Intersect(rngInput, Target.Cells(1, 1)) Is Nothing Then Exit Sub '修改为小于0的值不记录 If rngInput.Value <= 0 Then Exit Sub '将修改单元格时的时间记录到工作表LogB2 With Worksheets("LogB2") '工作表最后一行 Set rngLog = .Cells(.Rows.Count,1).End(xlUp) '确定工作表最后一行单元格含有值 If Len(rngLog.Value) > 0 Then '移至下方相邻的空单元格 Set rngLog = rngLog.Offset(1, 0) End If End With '写入当前时间 rngLog.Value = Now End Sub
Q:我想增加记录另一个单元格的修改时间,例如单元格D2每次修改的值大于0时,将修改的时间记录到工作表LogD2中,如何编写代码?
A:同样使用工作表事件来完成。
打开VBE,双击工作表Sheet1对象模块,输入代码:
Private Sub Worksheet_Change(ByVal Target As Range) Dim rngLog As Range Dim wksLog As Worksheet '根据所修改的单元格 '赋值相应的工作表 Select Case Target.Cells(1, 1).Address Case "$B$2" Set wksLog =Worksheets("LogB2") Case "$D$2" Set wksLog =Worksheets("LogD2") Case Else Exit Sub End Select '如果修改的值小于0则不记录修改时间 If Target.Cells(1, 1).Value <= 0 ThenExit Sub With wksLog '工作表数据所在的最后一行 Set rngLog = .Cells(.Rows.Count, 1).End(xlUp) '如果最后一个数据单元格包含值 If Len(rngLog.Value) > 0 Then '偏移到下方相邻单元格 Set rngLog = rngLog.Offset(1, 0) End If End With '写入当前时间 rngLog.Value = Now End Sub