我想要将日期追加到用户仅在最后一行的一列中输入数据的数据范围。因此,如果有4行数据,并且用户在第五行的一个有效列(B:L)中输入了任何内容,则日期将被添加到“M”行以标记输入日期。 / p>
有没有办法轻松做到这一点?我可以想到一种简单的方法来添加sub
,基本上可以说任何列B中的数据:L - >添加日期,但每次用户更改工作表或添加信息时我都必须调用它。
我可以在每一行中输入一个公式,但是当覆盖或扩展任何内容时,我仍然需要更新它。只是想知道是否有人知道快速解决方案。
编辑:
实际使用,
Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long
lastRow = GetLastRow(Sheets("MySheet"))
If lastRow = 1 Then Exit Sub
If Not Intersect(Target, Target.Worksheet.Range("B" & CStr(lastRow) & ":L" & CStr(lastRow))) Is Nothing Then
Sheets("MySheet").Range("M" & CStr(lastRow)).value = Date
End If
End Sub
将修改工作表更改时在最后一行之外输入的任何内容。因此,如果数据进入第6行,并且您在第9行输入内容,它会将最后一行检测为第9行。我已经确定这实际上已经足够了,因为我将整理出空行,但如果您想要只需修改最后一行,就可以使用保留为全局变量的oldLastRow
值。然后检查sub是否仅针对该值进行修改,如果是,请运行代码,然后将oldLastRow
更改为新的lastRow
。
答案 0 :(得分:1)
如果我正确理解您的问题,那么您要查找的是当前工作表的Worksheet_Change事件以及确保更新特定范围的过滤器。
要执行此操作,请在VBA编辑器中转到您希望使用此功能的工作表,然后双击它,然后输入以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, ActiveSheet.Range("B:L")) Is Nothing) Then
ActiveSheet.Range("M" & Target.Row).Value = Now()
End If
End Sub
这基本上说的是,如果B列到L列中有任何变化,则将当前时间放入M列。
希望这可以解决问题!
<强>更新强>
按照评论中的说明考虑最后一行:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastRow As Long
LastRow = ActiveSheet.UsedRange.Rows.Count
If Not (Intersect(Target, ActiveSheet.Range("B" & LastRow & ":L" & LastRow)) Is Nothing) Then
ActiveSheet.Range("M" & LastRow).Value = Now()
End If
End Sub