显示单元格的旧值和新值

我有一个工作表logging使用单元格所做的更改。 它如下

Public OldVal As String Public NewVal As String Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub OldVal = Target.Value End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim LDate As String If Target.Cells.Count > 1 Then Exit Sub NewVal = Target.Value Sheets("corrections").Cells(Rows.Count, "A").End(xlUp)(2).Value = Now & "_Sheet " & ActiveSheet.Name & " Cell " & Target.Address(0, 0) & " was changed from '" & OldVal & "' to '" & NewVal & "'" OldVal = "" NewVal = "" End Sub 

我的问题是,由于某种原因,它将永远不会显示以前的值。 它只会在Sheet单元格B5从“'变成'12'时才会输出,即使例如10个单元格在前面。

我也很好奇,有没有一种方法可以让代码不在任何时候运行。 编号喜欢有一个button,你点击,在这一点上,它将启动并开始logging更改。

谢谢

我得到了你的发布代码,以一个非常小的改变:

 Public OldVal As String Public NewVal As String Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub OldVal = Target.Value End Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim LDate As String If Target.Cells.Count > 1 Then Exit Sub NewVal = Target.Value Application.EnableEvents = False Sheets("corrections").Cells(Rows.Count, "A").End(xlUp)(2).Value = Now & "_Sheet " & ActiveSheet.Name & " Cell " & Target.Address(0, 0) & " was changed from '" & OldVal & "' to '" & NewVal & "'" Application.EnableEvents = True OldVal = "" NewVal = "" End Sub 

对于第二个问题,从下面开始:

 Application.EnableEvents = False 

钩住你的button到这样一个macros:

 Sub StartLogging() Application.EnableEvents = True End Sub 

你的代码对我来说工作正常。 至于启用/禁用macros,你只需要在每个IF之前(/上)插入这一行(在你的两个macros中)。 可选检查更合适的单元来存储是/否选项(而不是“X1”):

 If Sheets("corrections").Range("X1") <> "Yes" Then Exit Sub ' where you can change X1 for a more appropriate cell 

要创buildbutton只需添加形状/对象,并分配下面的macros:

 Sub Enable_Logs() Sheets("corrections").Range("X1").Value = "Yes" End Sub Sub Disable_Logs() Sheets("corrections").Range("X1").Value = "No" End Sub 

注意! 要添加分配给它们的macros的button,请按Alt + N,+ SH并select一个形状。 然后,右键单击形状>分配macros(并select相应的macros)。 注意! 第一次运行macros时,应该在单元格X1中手动设置“是”值。

这个问题为什么我的OldVal没有显示出来,是它被列入arrays。 所以当我告诉它看OldVal(1,1)时,它就像它应该的那样工作。 谢谢您的帮助。 最终的工作代码是:

公共OldVal作为string公开NewVal作为string

Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Sheets(“corrections”)。Range(“G1”)<>“Yes”Then Exit Sub OldVal = Target.Value2

结束小组

Private Sub Worksheet_Change(ByVal Target As Range)If Sheets(“corrections”)。Range(“G1”)<>“Yes”Then Exit Sub If Target.Cells.CountLarge> 1 Then Sub NewVal = Target.Value Sheets(“单元格(Rows.Count,“A”)。End(xlUp)(2).Value = Now&“_Sheet”&ActiveSheet.Name&“Cell”&Target.Address(0,0)&“was从“&OldVal(1,1)&”'改变为“&NewVal&”'“

 OldVal = "" NewVal = "" 

结束小组