我正在尝试创建一个自动过程,每次用户更改工作表上单元格中的值时都会激活该过程。我已设法创建一个过程,如果一个单元格被更改,将记录该值,但如果用户粘贴在几个单元格中,则只会更改它们所选择的第一个单元格。这就是我到目前为止,任何指导都将受到赞赏。
Option Explicit
Dim OldCellValue As String
' Get Windows Username
Function Usernam() As String
Usernam = Environ("username")
End Function
' Record the current cell value.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
OldCellValue = ActiveCell.Text
End Sub
'Paste the original value and new value into the next free row on sheet3
'with Windows username, date and time
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lstrow As Long
Dim Changerow As Long
Lstrow = Sheets("Sheet3").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row
Sheets("Sheet3").Range("A" & Lstrow).Value = Usernam
Sheets("Sheet3").Range("B" & Lstrow).Value = Date
Sheets("Sheet3").Range("C" & Lstrow).Value = Time
Sheets("Sheet3").Range("D" & Lstrow).Value = "Sheet " & ActiveSheet.Name & _
", Range " & Target.Address & " Chanaged from """ & OldCellValue & _
""" to """ & Target.Value & """"
End Sub
答案 0 :(得分:0)
更新
这将向您展示如何将目标范围与多个单元格一起使用,但它无法解决您现在需要在内存中存储多个先前单元格范围的需要
我玩过
Selection
目标的地址与Change
目标相同但是它非常笨拙我认为您需要一种不同的方式来跟踪更改 - 例如在Selection
上将当前值添加到单元格注释中。虽然仍然很混乱,但如果使用范围......
原帖
您需要使用Target
范围来处理每个单元格,即
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
Dim rng2 As Range
Set rng1 = Sheets("Sheet3").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
For Each rng2 In Target
rng1.Resize(1, 4) = Array(Environ("username"), Date, Time, "Sheet " & ActiveSheet.Name & _
", Range " & rng2.Address & " Changed from """ & OldCellValue & _
""" to """ & rng2.Value & """")
Next rng2
End Sub