我将此事件宏用于单个表,但我想看看是否有一种方法可以使用类似的宏,但它适用于所有表。例如,如果我在 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
任何帮助将不胜感激。
提前致谢!
我在互联网上搜索了任何类似的答案,但我无法将其转换为同一工作表上的多个范围。
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