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="">=>
‘将修改单元格时的时间记录到工作表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="">=>
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
……