这是之前回答并解决的问题的扩展。试图让数组的数组,并遇到了同样的错误“只能在公共对象模块用户自定义类型都可以强制......”VBA:使用自定义数据类型和函数返回数组(array(),array())
我期待到使用集合,但还没有想通了这一点。
Option Explicit
Public Type aType
P_Col As Integer
P_Rad As Single
P_X As Single
P_Y As Single
End Type
Public Type bType
Shp1() As aType
Shp2() As aType
Shp3() As aType
End Type
Function MakePatterns() As bType()
Dim i As Integer
Dim circles() As aType
Dim triangles() As aType
Dim squares() As aType
Dim shps() As bType
For i = 1 To 5
ReDim Preserve circles(i)
circles(i).P_Col = Int(i/2)
circles(i).P_Rad = i
circles(i).P_X = i * 10 + 1
circles(i).P_Y = i * 10 + 5
Next
For i = 1 To 5
ReDim Preserve triangles(i)
triangles(i).P_Col = Int(i/2)
triangles(i).P_Rad = i
triangles(i).P_X = i * 10 + 1
triangles(i).P_Y = i * 10 + 5
Next
For i = 1 To 5
ReDim Preserve squares(i)
squares(i).P_Col = Int(i/2)
squares(i).P_Rad = i
squares(i).P_X = i * 10 + 1
squares(i).P_Y = i * 10 + 5
Next
For i = 1 To 5
ReDim Preserve shps(i)
shps(i) = Array(circles(i), triangles(i), squares(i))
Next
'For i = 1 To 5
' Debug.Print circles(i).P_Col; circles(i).P_Rad; _
' circles(i).P_X; circles(i).P_Y
'Next
MakePatterns = shps
End Function
如果你知道元素的数量,这是更好地使用数组和调整它们的大小只有一次。例如'Dim circles(1 to 5)As aType' – Slai
感谢Slai。实际上,元素的数量并不总是相同的。也许我不应该将它简化为5。事实上,我不确定如何处理不同的尺寸,而不会在返回的数组中留下空元素。 如果圆(10),三角形(4),广场(56),我在想这样做了56次(最大UBOUND),并留下大量的空.shp1和.shp2的。否则,我正在考虑为每个循环做单独的循环。 – user110084
['Scripting.Dictionary'](http://stackoverflow.com/documentation/vba/3667/scripting-dictionary-object)应该比['Collection']容易一点(http://stackoverflow.com/documentation/vba/5838/collections) – Slai