Excel VBA集合和自定义数据types

我正在尝试学习如何创build一个自定义的数据types,然后用一个集合。 我以另一种方式解决了这个问题,但是这是从我自动化的时间表报告开始的。 我最初想要一个二维数组与不同的数据types。 当我不能这样做的时候,一些研究导致了一组自定义数据types的想法。 然而,我发现的例子不断推动我创build一个class级。 我不舒服,看来这应该是可行的。 这里是我寻找的东西(我从我在这个网站上find的一个例子开始):

Option Explicit '***** User defined type Public Type MyType MyInt As Integer MyString As String MyDoubleArr(2) As Double End Type Public ColThings As Collection Sub CollectionTest() Dim x As Integer Dim vrecord As MyType For x = 1 To 4 vrecord.MyInt = x vrecord.MyString = "Matt" vrecord.MyDoubleArr(0) = x + 5 vrecord.MyDoubleArr(1) = x + 6 vrecord.MyDoubleArr(2) = x + 7 ColThings.Add vrecord Next x For x = 1 To 4 Debug.Assert vrecord.MyInt & " - " & vrecord.MyString & " - " & vrecord.MyDoubleArr(0) & ", " & vrecord.MyDoubleArr(1) & ", " & vrecord.MyDoubleArr(0) Next x End Sub 

我得到的错误是:编译错误:“只有在公共对象模块中定义的用户定义的types可以被强制到或从一个变体或传递到后期绑定函数”

我不是VBA的新手,但我正在努力进行下一步。

提前致谢。

我捅了一下,最终我不确定这是否是你想要的,但如果你不想创build一个类,那么我可以看到的唯一的其他select是将你的types存储在一个数组而不是一个集合。 就我所知(如果我错了,请纠正我) 不能将用户定义types添加到集合中 ,必须将其创build为类,实例化该类的对象,然后将其添加到集合中。

相反,我声明了MyType的数组Records()并将每个MyType添加到该数组中。

 Option Explicit '***** User defined type Public Type MyType MyInt As Integer MyString As String MyDoubleArr(2) As Double End Type Public ColThings As Collection Sub CollectionTest() Dim x As Integer Dim Records() As MyType Dim vrecord As MyType For x = 1 To 4 vrecord.MyInt = x vrecord.MyString = "Matt" vrecord.MyDoubleArr(0) = x + 5 vrecord.MyDoubleArr(1) = x + 6 vrecord.MyDoubleArr(2) = x + 7 ReDim Preserve Records(x) Records(x) = vrecord Next x For x = 1 To 4 Debug.Print Records(x).MyInt & " - " & Records(x).MyString & " - " & Records(x).MyDoubleArr(0) & ", " & Records(x).MyDoubleArr(1) & ", " & Records(x).MyDoubleArr(0) Next x End Sub 

我相信这你想要完成的事情类似 。 我还没有尝试过class级方法,因为你说你还没有做好这个准备,但是我认为这是一个很好的练习。

再次感谢大家。 我感谢帮助。 我的周末教育已经放慢了我们在达拉斯的天气(周六下雨了3个星期,我的互联网和地狱一起),母亲节和锻炼,但是我已经开始了。

你们周末过得很愉快