我建议在另一张工作表中自动维护工作表的“镜像副本”,以便与更改后的单元格的值进行比较。
@brettdj 和 @JohnLBevan 本质上建议做同样的事情,但它们分别将单元格值存储在注释或字典中(确实为这些想法 +1)。不过,我的感觉是,在单元格中备份单元格比在其他对象中备份单元格在概念上要简单得多(尤其是注释,您或用户可能希望将其用于其他目的)。
所以,假设我有Sheet1
用户可以更改的单元格。我创建了另一个名为的工作表Sheet1_Mirror
(如果你愿意,你可以创建它Workbook_Open
并且可以设置为隐藏 - 由你决定)。首先, 的内容与 的内容Sheet1_Mirror
相同Sheet1
(同样,您可以在 处强制执行此操作Workbook_Open
)。
每次触发Sheet1
's时Worksheet_Change
,代码都会检查“已更改”单元格中的值Sheet1
是否实际上与中的不同Sheet1_Mirror
。如果是这样,它会执行您想要的操作并更新镜像表。如果没有,那就什么都没有。
这应该使您走上正确的轨道:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
For Each r In Target.Cells
'Has the value actually changed?
If r.Value <> Sheet1_Mirror.Range(r.Address).Value Then
'Yes it has. Do whatever needs to be done.
MsgBox "Value of cell " & r.Address & " was changed. " & vbCrLf _
& "Was: " & vbTab & Sheet1_Mirror.Range(r.Address).Value & vbCrLf _
& "Is now: " & vbTab & r.Value
'Mirror this new value.
Sheet1_Mirror.Range(r.Address).Value = r.Value
Else
'It hasn't really changed. Do nothing.
End If
Next
End Sub