簡體   English   中英

如何檢查Excel表格單元格是否已被用戶編輯?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM