【发布时间】:2020-05-23 23:30:17
【问题描述】:
尝试初始化数组时,我在 Excel 2010(32 位版本)中遇到错误。该错误特别指出:“内存不足”我还应注意,我正在使用 32 GB RAM 的 64 位计算机上进行编码。
这是我正在使用的代码:
Sub ArrayTest()
Dim C As Variant
ReDim C(50257, 768) As Variant
Dim row As Integer
Dim column As Integer
For row = 1 To UBound(C, 1)
For column = 1 To UBound(C, 2)
C(row, column) = rnd
Next
Next
End Sub
当我尝试 ReDim C() 时发生错误。
到目前为止我尝试了什么:
我想我可能已经达到了 Variant 数据类型的限制。所以我尝试重新调整一个 Double 类型的数组。我遇到了同样的错误。我成功使用了 Integer 数据类型,但问题是我需要使用此数组捕获浮点数据(如 Rnd 函数所示)。
有人建议我尝试使用字节数组。但是字节数组只能捕获整数数据。所以那也没用。我考虑的另一个选择是使用 Win32 API 来查看是否可以在 Excel 之外的内存中分配数组。特别是 VirtualAlloc() 函数。我还没有真正尝试过,因为我不确定它是否会起作用。有人告诉我,如果您使用的底层程序是 32 位的,那么它将无法工作。
无论如何,在这一点上,我对我应该做什么感到困惑。我可能会考虑使用 Access 数据库来存储数据(50257 x 768 = 38,597,376 个数据元素)。不过,这会显着减慢代码速度。
有没有办法解决这个问题?
【问题讨论】:
-
使用
Long而不是Integer。也将Randomize也扔在那里 - 也许至少给文档一个阅读,然后决定你是否想要它。