工作表中有一張表格。我想使用VBA來捕獲對該表所做的任何更改。這可能嗎?例如,C4 = 14
開頭。如果用戶更改爲C4 = 18
,我想知道哪個單元格發生了更改(本例中爲C4
),並且它已更改爲(在這種情況下爲18
)。有沒有辦法使用VBA捕獲Excel中更改的單元格的內容?
對於高級功能,如果用戶添加一行,改變C4
到C5
(添加上述列4行),並添加C4 = 11
(新C4
)。這可以被捕獲嗎?如何刪除原始第4行?可以捕獲已刪除的內容嗎?
任何幫助表示讚賞。
謝謝
工作表中有一張表格。我想使用VBA來捕獲對該表所做的任何更改。這可能嗎?例如,C4 = 14
開頭。如果用戶更改爲C4 = 18
,我想知道哪個單元格發生了更改(本例中爲C4
),並且它已更改爲(在這種情況下爲18
)。有沒有辦法使用VBA捕獲Excel中更改的單元格的內容?
對於高級功能,如果用戶添加一行,改變C4
到C5
(添加上述列4行),並添加C4 = 11
(新C4
)。這可以被捕獲嗎?如何刪除原始第4行?可以捕獲已刪除的內容嗎?
任何幫助表示讚賞。
謝謝
不幸的是答案不是,不是真的。在工作表更改事件觸發時,目標的值爲新值,舊值丟失。
我曾經讀過一篇關於維護隱藏工作簿的人,這種工作簿反映了對目標工作簿所做的每項操作,因此可用於跟蹤更改。但顯然這是很多努力。
另一種方法是嘗試使用Application.Undo。因此,從工作表更改事件中記錄值是什麼,應用Application.Undo,記錄該值,然後用第一個值替換。這真的很混亂。
我不是按照你所說的。我測試了「工作表更改」和「目標」,我可以在添加行/列後捕獲更改的值並添加值。但是,我無法捕獲已刪除的內容。你在談論這個部分嗎? – NewGuyComesIn
對不起,我誤解了你的問題。是的,你可以找到新的價值,但我的意見仍然與被刪除的內容有關。更改事件在提交更改後觸發,因此原始值不可用。 – steveo40
到目前爲止,我找不到一種方法來捕獲已刪除的內容。也許你是對的。 – NewGuyComesIn
說我們的表是A1到D4。在工作表代碼區域中輸入以下代碼:
Public OldValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("A1:D4"), Target) Is Nothing Then
Else
If Target.Count = 1 Then
MsgBox "Previous Value: " & OldValue & vbCrLf & "New value: " & Target.Value
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Range("A1:D4"), Target) Is Nothing Then
Else
If Target.Count = 1 Then
OldValue = Target.Value
End If
End If
End Sub
這將適用於簡單的單元格單擊和類型編輯。 SelectionChange
檢測並記錄舊值。 Change
顯示舊值和新值。
這不適用於多單元複製/粘貼。
感謝您的代碼。我做了類似的事情。現在我可以在添加行/列後捕獲更改的值並添加值。但我在捕獲已刪除的內容時遇到了問題。有什麼方法來捕獲刪除的值? – NewGuyComesIn
@NewGuyComesIn .............這個簡單的方法只適用於**單個單元格**的變化..............捕獲多個單元格的變化,如刪除整列都是可能的,但方式更復雜! –
查看「工作表變更」事件,並捕獲單元格(目標)並與新值進行比較。 – BruceWayne
https://msdn.microsoft.com/en-us/library/office/ff839775.aspx – CMArg
@CMArg謝謝。我會仔細看看的。 – NewGuyComesIn