我正在尝试创建600 * 600 Matrix作为用户定义类型,稍后将此类型用于其他矩阵。问题是它发出一个错误,说明"内容的变量大小"不能超过64kb。
我的代码如下:
Type Matrixtype
Contents(1to600,1 to600) As double
End Type
答案 0 :(得分:2)
从这里https://msdn.microsoft.com/en-us/library/office/gg278742.aspx
用户定义类型的大小超过64K。
减小用户定义类型的大小。通常,用户定义类型的大小等于为其元素指定的大小的总和。在某些平台上,元素之间可能存在填充,以使它们在字边界上对齐。如果将一个用户定义的类型嵌套在另一个中,则嵌套类型的大小必须包含在新类型的大小中。
双打是8个字节。 360,000双打是290万字节(~2,800 kb)。这就是为什么你不能拥有600平方的双打数据结构的原因。除非您将数据类型更改为小于Double的值,否则您也不能拥有150平方。
我不确定你要用这个来完成什么,所以我能给你的最好建议是创建一个类并在那里维护数组。创建一个类并将模块命名为CTest。在其中,输入此代码
Private mdContents(1 To 600, 1 To 600) As Double
Public Property Let Contents(ByVal lOne As Long, ByVal lTwo As Long, ByVal dValue As Double)
mdContents(lOne, lTwo) = dValue
End Property
Public Property Get Contents(ByVal lOne As Long, ByVal lTwo As Long) As Double
Contents = mdContents(lOne, lTwo)
End Property
现在,在标准模块中,您可以创建所需的此类的许多副本。
Public Sub Test()
Dim clsOne As CTest
Dim clsTwo As CTest
Set clsOne = New CTest
clsOne.Contents(1, 1) = 2 ^ 2
Set clsTwo = New CTest
clsTwo.Contents(10, 10) = 2 ^ 3
Debug.Print clsOne.Contents(1, 1), clsTwo.Contents(10, 10)
End Sub