Ваша проблема в том, что вы тасуете миллионы мегабайт памяти.На полпути ваш код копирует 5,7 МБайт из одной области памяти в другую каждый раз через внутренний цикл.В общей сложности от 5700 гигабайт по всей программе.
Правила объединяют небольшие строки вместе, а затем объединяют меньшие строки в конце конкатенации.Чтобы строки меньшего размера не превышали, скажем, 4000 байтов, затем присоедините эти файлы в конце.
У современных языков есть объект для построения строк, у VBA тоже есть объект, который просто не называется.
ВВ VBA есть функция Mid
и оператор Mid
.Они делают противоположные вещи.Итак, вы сначала создаете свой последний укус.Затем с помощью оператора Mid
вставьте подстроки в первую строку.Это позволяет избежать сотен мегабайт перетасовки.Используйте Rtrim
, чтобы убрать лишние пробелы в конце.Если вы уменьшите вывод до 6 миллионов пробелов, то он уместится в вашем примере и будет использовать около 12 МБ по сравнению с тысячами гигабайт.
Вот небольшой пример.
Private Sub Form_Load()
OutPut = Space(1500)
For x = 1 To 500
Offset = Offset + Len(CStr(x))
Mid(OutPut, Offset) = CStr(x)
Next
MsgBox OutPut
End Sub
См. Указатели, необходимые для ускорения макроса вложенного цикла в VBA