如何检查 Excel table 单元格是否已被用户编辑?
How to check if Excel table cell has been edited by user?
监控 Excel table 中变化的选项有哪些?
我能想到的可能的解决方案是拥有 table 的克隆副本,比如在隐藏的工作表和比较两个工作表的公式中。
还有其他方法吗?
好吧,方法有很多种。
即将使用以下方法订阅 Worksheet_Change
事件:
Private Sub Worksheet_Change(ByVal Target As Range)
'some code, which will compare values and store info in a file
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
我想出了这样的代码(作为基于事件的代码 - 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
它记录用户在给定 Sheet(编写代码的地方)中所做的任何更改。它将在另一个 Sheet 中向我展示更改的完成人、时间和地点。这件事我唯一的问题是用户必须启用宏,否则它不起作用......我不知道如何合理地解决这个问题......
监控 Excel table 中变化的选项有哪些?
我能想到的可能的解决方案是拥有 table 的克隆副本,比如在隐藏的工作表和比较两个工作表的公式中。
还有其他方法吗?
好吧,方法有很多种。
即将使用以下方法订阅 Worksheet_Change
事件:
Private Sub Worksheet_Change(ByVal Target As Range)
'some code, which will compare values and store info in a file
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
我想出了这样的代码(作为基于事件的代码 - 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
它记录用户在给定 Sheet(编写代码的地方)中所做的任何更改。它将在另一个 Sheet 中向我展示更改的完成人、时间和地点。这件事我唯一的问题是用户必须启用宏,否则它不起作用......我不知道如何合理地解决这个问题......