事件处理程序过程logging所选值单元格中的所有值更改之前和之后

我正在尝试创build一个自动过程,每次用户更改工作表上单元格中的值时都会激活该过程。 我设法创build了一个过程,如果一个单元格被更改,将logging该值,但是如果用户粘贴了多个单元格,那么只有他们select的第一个单元格将被更改。 这是我迄今为止,任何指导将不胜感激。

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 

更新

这将向您显示如何使用多个单元格的目标范围,但它不能满足您现在必须潜在地将多个先前的单元格范围存储在内存中的需要

我玩过

  • 公共variables保持在先范围,
  • 然后处理这些单元格,如果Selection目标的地址与Change目标相同,但是非常不方便

我认为你需要一种不同的方式来跟踪变化 – 例如在Selection添加当前值到单元格注释。 仍然凌乱,但任何单元格更改将非常密集的Excel如果使用范围…

原始post
您需要使用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