下午好,
我正在处理一个 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 的联合创始人)。