午安,
我正在處理一個 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 的共同創辦人)。