2016-04-15 16 views
0

工作表中有一張表格。我想使用VBA來捕獲對該表所做的任何更改。這可能嗎?例如,C4 = 14開頭。如果用戶更改爲C4 = 18,我想知道哪個單元格發生了更改(本例中爲C4),並且它已更改爲(在這種情況下爲18)。有沒有辦法使用VBA捕獲Excel中更改的單元格的內容?

對於高級功能,如果用戶添加一行,改變C4C5(添加上述列4行),並添加C4 = 11(新C4)。這可以被捕獲嗎?如何刪除原始第4行?可以捕獲已刪除的內容嗎?

任何幫助表示讚賞。

謝謝

+0

查看「工作表變更」事件,並捕獲單元格(目標)並與新值進行比較。 – BruceWayne

+1

https://msdn.microsoft.com/en-us/library/office/ff839775.aspx – CMArg

+0

@CMArg謝謝。我會仔細看看的。 – NewGuyComesIn

回答

0

不幸的是答案不是,不是真的。在工作表更改事件觸發時,目標的值爲新值,舊值丟失。

我曾經讀過一篇關於維護隱藏工作簿的人,這種工作簿反映了對目標工作簿所做的每項操作,因此可用於跟蹤更改。但顯然這是很多努力。

另一種方法是嘗試使用Application.Undo。因此,從工作表更改事件中記錄值是什麼,應用Application.Undo,記錄該值,然後用第一個值替換。這真的很混亂。

+0

我不是按照你所說的。我測試了「工作表更改」和「目標」,我可以在添加行/列後捕獲更改的值並添加值。但是,我無法捕獲已刪除的內容。你在談論這個部分嗎? – NewGuyComesIn

+0

對不起,我誤解了你的問題。是的,你可以找到新的價值,但我的意見仍然與被刪除的內容有關。更改事件在提交更改後觸發,因此原始值不可用。 – steveo40

+0

到目前爲止,我找不到一種方法來捕獲已刪除的內容。也許你是對的。 – NewGuyComesIn

0

說我們的表是A1D4。在工作表代碼區域中輸入以下代碼:

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顯示舊值和新值。

這不適用於多單元複製/粘貼。

+0

感謝您的代碼。我做了類似的事情。現在我可以在添加行/列後捕獲更改的值並添加值。但我在捕獲已刪除的內容時遇到了問題。有什麼方法來捕獲刪除的值? – NewGuyComesIn

+0

@NewGuyComesIn .............這個簡單的方法只適用於**單個單元格**的變化..............捕獲多個單元格的變化,如刪除整列都是可能的,但方式更復雜! –

相關問題