Я сталкиваюсь с ошибкой в Excel 2010 (32-разрядная версия) при попытке инициализировать массив. В частности, в сообщении об ошибке говорится: «Недостаточно памяти». Следует также отметить, что я пишу код на 64-разрядной машине с 32 ГБ ОЗУ.
Это код, который я использую:
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. В частности, функция VirtualAllo c (). На самом деле я еще не пробовал это, так как я не уверен, что это сработает. Мне сказали, что если используемая вами основная программа 32-битная, то она не будет работать.
Во всяком случае, в этот момент я озадачен тем, что мне следует делать. Я могу рассмотреть возможность использования базы данных Access для хранения данных (50257 x 768 = 38 597 376 элементов данных). Это значительно замедлит код.
Есть ли способы обойти это?