VBA: Недостаточно памяти Ошибка из-за утечки памяти .... Можно ли вручную вызвать сборщик мусора? - PullRequest
0 голосов
/ 27 сентября 2011

Начинающий программист здесь. У меня есть код, который копирует данные с сервера за 12 часов и отображает их в Excel. Мой код берет отображаемый код и экспортирует его в файл, добавляя каждые 12 часов, чтобы у меня были данные за месяцы.

Моя проблема в том, что примерно через 20 дней у меня заканчивается память. Теоретически, это не должно занимать намного больше данных, чем исходная программа, и через 20 дней после ее исчерпания памяти происходит утечка памяти. В старой java-программе я просто вызывал сборщик мусора с некоторой частотой, и проблема исчезла. Есть ли способ сделать это в Excel-VBA? Я читал об установке переменных в ноль, но у меня есть много переменных, и я думаю, что реальная проблема связана с тем, что они хранят ВСЕ данные для чтения как ОЗУ, и я не знаю, как их установить ноль.

Другой любопытный бит - после его сбоя из-за памяти я не могу запустить программу снова, не выключив Excel. Таким образом, после сбоя он не удаляет вещи в памяти?

Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

VBA не имеет сборки мусора в традиционном смысле - так что ответ на ваш конкретный запрос - нет, но ведет подсчет ссылок. Таким образом, чтобы освободить память, вам нужно делать то, что вы предлагаете, и разыменовывать ваши объекты, когда они больше не нужны.

1 голос
/ 27 сентября 2011

Насколько я понимаю ваш вопрос, ваша программа Excel все еще работает и остается открытой каждый день (это я понял из after 20 days работы).

Использование Set myVar = Nothing все ещеЛучшая практика, но позвольте вам сказать, что вы не хотите этого делать.

Что я могу придумать, так это создать новый экземпляр Excel для запуска вашего кода внутри и закрытия приложения в конце выполняемого кода.

Что-то вроде:

'Don't forget to add the reference ..  
'Microsoft Excel X,X object library 

Sub myTest()
Dim xlAPp As New Application 

' your code

Set xlApp = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...