如何將一個 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 的共同創辦人)。

相關內容