首页 > 解决方案 > VBA - 编辑行范围时更新时间戳

问题描述

我在尝试将 VBA 代码组合在一起时遇到一些问题,该代码将在每次编辑行中的某些内容时更新时间戳。

所以我需要的是 A3 中的时间戳,用于编辑 B3:CA3 中的某些内容,以此类推,每行最多 1000 行。

我已经环顾四周,但到目前为止我发现的所有代码都只与特定列相关,而不是与行范围相关......

任何帮助都感激不尽。

标签: excelvbatimestamprangerow

解决方案


试试这个工作表事件宏:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range, Intersection As Range, cell As Range
    Set r = Range("B3:CA1003")
    Set Intersection = Intersect(r, Target)

    If Intersection Is Nothing Then Exit Sub

    Application.EnableEvents = False
        For Each cell In Intersection
            Range("A" & cell.Row).Value = Date & " " & Time
        Next cell
    Application.EnableEvents = True
End Sub

因为它是工作表代码,所以非常容易安装和自动使用:

  1. 右键单击 Excel 窗口底部附近的选项卡名称
  2. 选择查看代码 - 这将打开一个 VBE 窗口
  3. 粘贴这些东西并关闭 VBE 窗口

如果您有任何疑虑,请先在试用工作表上进行尝试。

如果您保存工作簿,宏将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx

删除宏:

  1. 如上所述调出 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件宏(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

必须启用宏才能使其正常工作!

编辑#1:

要同时获取 NT 用户名和应用程序用户名,请尝试:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range, Intersection As Range, cell As Range
    Dim s As String

    Set r = Range("B3:CA1003")
    Set Intersection = Intersect(r, Target)
    s = vbCrLf & Environ("USERNAME") & vbCrLf & Application.UserName

    If Intersection Is Nothing Then Exit Sub

    Application.EnableEvents = False
        For Each cell In Intersection
            Range("A" & cell.Row).Value = Date & " " & Time & s
        Next cell
    Application.EnableEvents = True
End Sub

推荐阅读