当对每个范围中的行进行任何更改时,我想在同一工作表上添加时间戳和应用程序用户名多个不同范围

问题描述 投票:0回答:1

Example of one of my tables 我将此事件宏用于单个表,但我想看看是否有一种方法可以使用类似的宏,但它适用于所有表。例如,如果我在 table1 (V3:AG34) 中进行更改,我希望 AH 列在该表中发生更改的每一行中都有一个用户名/时间戳。如果我对 Table5 (BP3:BU160) 进行更改,我希望 BV 列在该表中发生更改的每一行中都有一个用户名/时间戳。这可能吗,如果我向这些表中添加行,可以写入更新吗?

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

任何帮助将不胜感激。

提前致谢!

我在互联网上搜索了任何类似的答案,但我无法将其转换为同一工作表上的多个范围。

excel vba timestamp worksheet
1个回答
0
投票

工作表更改:时间戳和用户

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Const FIRST_ROW_RANGE As String = "B3:CA3"
    Const STAMP_COLUMN As String = "A"
    
    Dim trg As Range
    
    With Me.Range(FIRST_ROW_RANGE)
        Set trg = .Resize(Me.Rows.Count - .Row + 1)
    End With
    
    Dim irg As Range: Set irg = Intersect(trg, Target)
    If irg Is Nothing Then Exit Sub
    
    Dim drg As Range
    Set drg = Intersect(irg.EntireRow, Me.Columns(STAMP_COLUMN))
    
    Dim Stamp As String: Stamp = Now _
        & vbCrLf & Environ("USERNAME") & vbCrLf & Application.UserName
    
    Application.EnableEvents = False
        drg.Value = Stamp
    Application.EnableEvents = True

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.