Принудительная сборка мусора
Есть ли способ заставить сборщик мусора в VBA/Excel 2000?
Этот вопрос относится к языку макросов в Excel. Не использовать VB .NET для манипулирования Excel. Так что GC.collect() не будет работать
3 ответа
Вы не можете воспользоваться сборкой мусора, предоставляемой.NET Framework, при использовании прямой VBA. Возможно, эта статья Эрика Липперта будет полезна
Вы не можете принудительно использовать GC в VBA, но хорошо, если для глобальных переменных задано Nothing.
В статье, упомянутой kd7, говорится, что бесполезно устанавливать нулевые локальные переменные, пока они не выйдут из области видимости, но не говорит о глобальных переменных.
В VBA глобальные переменные, определенные в модуле, остаются живыми в течение всего сеанса Excel, т.е. до тех пор, пока документ, содержащий модуль VBA, который их определяет, не будет закрыт.
Так что не ставь бесполезным Set O = Nothing
когда O локально, но делайте это, когда оно глобально.
VBA/Excel не имеет сборки мусора, как старый VB. Вместо GC он использует подсчет ссылок. Память освобождается, когда вы устанавливаете указатель на ничто (или когда переменная выходит из области видимости). Как и в старом VB, это означает, что циклические ссылки никогда не освобождаются.