我正在使用未公开的函数ObjPtr检查Excel单元格的内存地址。我很惊讶地发现不同的单元可以在内存中共享相同的地址。这说不通。有人能解释一下这件奇怪的事吗?
Sub testobjptr()
Dim objTest As Range
Set objTest = Range("A1")
Dim i As Integer
For i = 1 To 10
Debug.Print Join(Split(objTest.Address, "$"), "") & " at " & ObjPtr(objTest)
Set objTest = objTest.Offset(i, i)
Next i
End Sub下面是“即时”窗口中的输出:
A1为80276608
B2为80276928
D4为80276608
G7为80276928
K11为80276608
P16为80276928
V22为80276608
AC29为80276928
AK37为80276608
AT46为80276928
发布于 2014-10-29 16:31:11
我很惊讶地发现不同的单元可以在内存中共享相同的地址。
不是的。不同的单元在内存中不共享相同的地址。对象objTest是。每次赋值变量时都会创建一个指针。
尝尝这个。在这里,您将看到所有对象都引用相同的单元,但在内存中被分配了不同的地址。
Sub testobjptr()
Dim rng1 As Range, rng2 As Range, rng3 As Range, rng4 As Range
Set rng1 = Range("A1")
Set rng2 = Range("A1")
Set rng3 = Range("A1")
Set rng4 = Range("A1")
Debug.Print Join(Split(rng1.Address, "$"), "") & " at " & ObjPtr(rng1)
Debug.Print Join(Split(rng2.Address, "$"), "") & " at " & ObjPtr(rng2)
Debug.Print Join(Split(rng3.Address, "$"), "") & " at " & ObjPtr(rng3)
Debug.Print Join(Split(rng4.Address, "$"), "") & " at " & ObjPtr(rng4)
End Sub输出
A1 at 202834688
A1 at 260111360
A1 at 260111744
A1 at 260091264https://stackoverflow.com/questions/26624715
复制相似问题