Страницы: 1
RSS
ошибка : out of stack space
 
Добрый день!

Столкнулся неожиданно с такой ситуацией: при вызове вложенной процедуры в VBA появляется указанное сообщение об ошибке:
Код
... out of stack space...

Собственно говоря, процедура довольно громоздкая, обрабатывает и пересчитывает массивы данных размером примерно 10000*200 ячеек... хотя работала до сего времени вполне нормально...

Собственно говоря, в чем здесь может быть причина появления такого сообщения:
- много переменных?
- большой размер переменных (массивов)?
- большое кол-во вызовов функций?
- вызов функций с аргументами в виде больших массивов (используется несколько раз такое)?

Какие тут способы решения имеются - может, надо как-то уничтожать переменные после использования, очищать стек - как это сделать?... Может, какие-то параметры в реестре надо подправить или еще где?.. Что известно по данному вопросу уважаемым специалистам?..

Спасибо заранее...
 
Собственно говоря почему-бы не в ПОИСК ?
Согласие есть продукт при полном непротивлении сторон
 
Хорошо...

Вот, смотрю, там 5 случаев указано, к моему может, видимо, это относиться:
Цитата
...Your local variables require more local variable space than is available.Try declaring some variables at the module level instead. You can also declare all variables in the procedure static by preceding the Property,Sub, or Function keyword with Static. Or you can use the Static statement to declare individual Static variables within procedures...
Все равно странно, больше всего ведь места массивы занимают, но не на них ошибка вылезает...
И как, получается, каждую что ли переменную надо в начале модуля объявлять заранее? А потом что, уничтожать надо или как?

Еще вот, смотрю в редакторе VBA - там такая закладка Call stack - почему-то в ней список в 50 с лишним процедур, когда у меня столько их одновременно не вызывается... и некоторые повторяются почему-то...
И вообще, как-то размер и заполненность этого стека можно ли узнать и регулировать?..
 
Нет файла - нет идей, что тут не понятно.
 
Причина - большой размер массивов
10,000*200 = 2 млн ячеек - таких массивов много в памяти Excel не удержит

Как вариант еще одной причины, - вызов функций с аргументами в виде больших массивов
Массивы такие надо передавать как byRef в другие функции
(ну и вообще сделать в коде так, чтобы не создавались лишние копии такого большого массива, - а то памяти не хватит)
 
Цитата
kalbasiatka написал: Нет файла - нет идей, что тут не понятно.
Глубоко сомневаюсь, что данный файл кому-то разбирать охота будет... но думаю, что основные варианты можно предположить и без его досконального исследования...
 
Цитата
Игорь написал: Причина - большой размер массивов
Про массивы - да, все так, но ведь он не выдает Out of memory (это прошло с установкой 64-битной версии), а вот на стек именно ругается-то... А каков этот стек и его допустимый размер - мне пока неведомо...
 
Цитата
Игорь написал: Массивы такие надо передавать как byRef в другие функции
Так вроде бы по умолчанию они так и передаются, нет разве?.. И вроде как лишних копий не делается...
Изменено: denis76 - 01.06.2016 22:06:07
 
Мне стека не хватало пару раз из-за рекурсии.
 
Разобрался, в чем дело... когда начал код улучшать, нашел место, где процедуры вызывают одна другую поочередно...
 
Т.е. тоже виновата рекурсия?
Страницы: 1
Читают тему
Наверх