我正在尝试在当前的工作系统中构建一个小的嵌套函数。我遇到的问题是,当我将第三个形状添加到集合并尝试根据添加到集合中的先前形状定位它时,它仍然基于第一个形状定位它。我最终得到的是原始位置的原件和堆叠在一起的副本。
Function ArrangeImages(ByRef scol1 As Collection, ByRef sA, sB As Shape)
Dim i, ii As Long
i = scol1.Count
ii = i - 1
If i = 1 Then
Set sB = scol1.Item(i)
End If
If scol1.Count > 1 Then
Set sA = scol1.Item(ii)
Set sB = scol1.Item(i)
sB.SetPosition sA.PositionX, sA.PositionY + (sA.SizeHeight / 2) +
(sB.SizeHeight / 2) + 0.15
End If
End Function
您正在设置彼此相等的对象,并且它们在内存中相互引用。事实上,您正在使对象加倍并消耗两倍的内存。
Set
设置的对象等于您希望它成为的对象引用。下面是一个示例。
Public Sub test()
Dim s As Worksheet
Dim s2 As Worksheet
Set s = Application.Workbooks.Add().Worksheets.Add
s.Name = "one"
Set s2 = s 's and s2 Name = "one"
s.Name = "two" 's and s2 Name = "two"
End Sub
Let
设置的对象等于您希望它的值。
尝试
Set sA = new Shape
Let sA = sB
而不是
Set sA = sB
如果这不起作用,则可能必须为要使用的每个形状创建一个属性或变量。
类似问题