这个问题与这个问题有些相关:VBA:如果用户删除单元格,范围对象会发生什么?
有没有办法可靠地测试两个单元格引用的身份,更重要的是,随着时间的推移存储单元格引用?
考虑以下示例:
Sub TestCellIdentity ()
Dim r As Range
Set r = Application.ActiveCell
r.Value = "Some Value"
Dim ws As Worksheet
Set ws = r.Worksheet
Dim n As String
n = ws.Name
Dim c As Range
Set c = Worksheets (n).Cells (r.Row, r.Column)
MsgBox ("ActiveCell ptr: " & CStr (ObjPtr (r)) & "Value: " & r.Value _
& "; Indirect access ptr: " & CStr (ObjPtr (c)) & " Value: " & c.Value)
End Sub
运行示例显示 ObjPtr (r) 和 ObjPtr (c) 是不同的,即使它们引用同一个单元格。更糟糕的是,在我看来(从一些测试)我不能假设具有相同 ObjPtr 引用的两个单元格对象(对象引用)保证引用同一个单元格(即我不能存储 ObjPtr 值并使用它,例如,作为某处的钥匙)。
因此我的问题是:如何在 Excel 中以在工作表中重命名、剪切和/或粘贴单元格后仍然存在的方式唯一标识一个单元格?