[英]How to check if Excel table cell has been edited by user?
有哪些選項可以監視Excel表中的更改?
我可以想到的可能解決方案是在隱藏的工作表中創建表的副本,並在公式中將兩個表進行比較。
還有其他辦法嗎?
好吧,有多種方法。
使用這種方法可以訂閱Worksheet_Change
事件:
Private Sub Worksheet_Change(ByVal Target As Range)
'some code, which will compare values and store info in a file
End Sub
我還建議了記錄此類事件的方法:獲取用戶名和更改的內容,然后將此信息寫入文件。
另外,您需要做一些額外的編碼來查看這是否是您感興趣的更改,但這留給您發現,因為這里將廣泛地描述所有選項:)
我想出了一個代碼(作為基於事件的代碼-Worksheet_Change),如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range
Set rg = Cells
Dim lastrow As Long
Dim username As String
If Intersect(Target, rg) Is Nothing Then Exit Sub
On Error GoTo ExitHere
Application.EnableEvents = False
With SomeOtherSheet
lastrow = .Cells(.Rows.Count, "H").End(xlUp).Row
.Range("H" & lastrow + 1) = Now
.Range("I" & lastrow + 1) = Target.Address
.Range("J" & lastrow + 1) = Environ("Username")
.Range("K" & lastrow + 1) = Application.username
End With
ExitHere:
Application.EnableEvents = True
End Sub
它在給定的工作表(編寫代碼的工作表)中記錄用戶所做的任何更改。 它將在另一個工作表中向我顯示更改的時間,地點和地點。 我對此問題唯一的問題是用戶必須啟用宏,否則它將不起作用...我不知道如何合理地解決此問題...
我完全同意@MichałTurczyn的觀點。 出於安全原因,最好保留有關更改的記錄。 您可以使用:
Option Explicit
Dim OldValue As String
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "The old value was " & OldValue & "." & vbNewLine & _
"The new value is " & Target.Value & "." & vbNewLine & _
"Date of change " & Now & "." & vbNewLine & _
"Change by " & Environ$("computername") & "."
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
OldValue = Target.Value
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.