我试图在我当前的工作系统中构建一个小的嵌套函数。我遇到的问题是,当我将第三个形状添加到集合中并尝试根据添加到集合中的先前形状来定位它时,它仍然基于第一个形状定位它。我最终得到的是原始位置的原件和堆叠在一起的副本。
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
答案 0 :(得分:1)
您将对象设置为彼此相等,并且它们在内存中相互引用。实际上,您将对象加倍并且使用了两倍的内存。
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
如果这不起作用,您可能必须为要使用的每个形状创建属性或变量。