問與答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