如何将一个 Excel 工作簿或工作表中的数据更改历史记录保存到另一个工作簿或工作表中

如何将一个 Excel 工作簿或工作表中的数据更改历史记录保存到另一个工作簿或工作表中

下午好,

我正在处理一个 Excel 工作表,其中有一个数据表。这些数据代表了我所在部门想要跟踪的几个指标。每当有人想用新数据填充表格时,单元格中的先前数据就会丢失。

如何创建一个单独的工作表,以便自动存储该表的所有值?我的意思是,当对表格单元格之一进行更改时,新值会自动存储在另一个表中,该表将保留单元格的所有值(旧值和新值)?我尝试了“跟踪更改”,但我不确定我是否非常喜欢这种方式。

有人知道更有效的方法来做到这一点吗?例如通过宏?

谢谢你!

答案1

(我在用手机,所以现在无法提供非常详细的答案。)

我为此编写了代码。我的目的是跟踪多个用户编辑的关键工作表上的所有更改。如果对数据来源​​存在争议,我可以查看日志。以下是一些会派上用场的 VBA 代码。

Worksheet_Change每次工作表更改时都会触发事件。

If Not Intersect(Target, Range("A1:G12")) Is Nothing将告诉您发生变化的单元格是否在您关心的范围内。

将您想要记录的值存储到数组中,然后在日志表上设置一些范围以使其等于该数组,而不是单独设置日志表上的每个单元格,这样速度更快。

尝试一下,看看你能走多远。明天我可以更详细地讲解。


第二天编辑

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

答案2

内置的“跟踪更改”功能可能比您尝试使用宏实现的任何更改跟踪功能都要强大得多。坚持下去。

答案3

我们(免责声明,我是创始人)为 Excel 构建了一个审计跟踪系统(类似于 Google Docs 的功能,但适用于 Excel)。它不需要共享工作簿,审计跟踪保存到本地 SQL 数据库,因此可以从任何工作簿访问它并将其保存为单独的工作表。看一看:http://www.officeautomata.com

答案4

使用 Sheetgo 的附加功能,您可以保存 Excel 中变量更改的历史记录。更多信息请参阅此博客文章:https://blog.sheetgo.com/how-to-solve-with-sheetgo/track-changes-in-excel-files/(*免责声明:我是 Sheetgo 的联合创始人)。

相关内容