问与答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