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