如何在一个 Excel 工作簿中保留数据更改的历史记录

如何在一个 Excel 工作簿中保留数据更改的历史记录

一名用户在不同的问题

A1:G12以下是一些代码,它们将监视包含代码的任何工作表上的范围。如果r是更改的行,则代码会将 Ar:Gr 中的所有内容复制到代码名为 shtLog 的工作表中。(代码名称是 VBA 中显示的名称,而不是 Excel 中选项卡上的名称。)这应该会让您朝着正确的方向前进。

 Private Sub Worksheet_Change(ByVal Target As Range)    
    Dim r As Integer
    Dim c As Integer
    Dim arr(1 To 1, 1 To 12)
    If Not Intersect(Target, Range("A1:G12")) Is Nothing Then
        r = Target.Row
        For c = 1 To 12
            arr(1, c) = Cells(r, c).Value
        Next
        With shtLog
            .Range(.Cells(.UsedRange.Rows.Count + 1, 1), .Cells(.UsedRange.Rows.Count + 1, 12)) = arr
        End With
    End If
End Sub

但是,虽然我可以在模块和 VBA 编辑器中看到我使用过的代码,但我无法看到、找到、选择或运行宏,所以我不知道如何让记录器工作。

有人知道如何让代码运行以便它开始在指定的工作表中进行记录吗?

答案1

不要将其放入模块中。

每次工作表发生变化时都会自动调用此宏,正如您从其第一行看到的那样:Private Sub Worksheet_Change(ByVal Target As Range)

在 VBA 编辑器的左侧,双击您想要拥有宏的工作表(即您想要跟踪更改的工作表),然后将代码粘贴到右侧。

如果您想调试它,请按照以下步骤操作:

  1. 放一个断点在代码的第一行,单击行的左侧。将出现一个棕色点,并且该行将以相同的颜色突出显示,如下所示: 在此处输入图片描述

  1. 在工作表中进行更改,例如在单元格中输入值。代码将执行并停止在断点,在我们的例子中,在第一行,它将以黄色突出显示,如下所示:

在此处输入图片描述


  1. 要逐行执行代码,请按F8。它将帮助您查看每一步发生的情况。

  2. 完成调试后,你可以删除断点点击棕色斑点。

请记住,宏将值放入名为的工作表中shtLog,您必须创建一个名为这样的工作表或在代码中更改名称,以避免出现找不到目标工作表的错误。

相关内容