Если бы это был управляемый код .NET (то есть сборщик мусора ), вам бы пришлось Release
каждый отдельный COM-объект, к которому вы когда-либо обращались, иначе процесс хоста (EXCEL.EXE) будет скорее всего, работает в фоновом режиме, потребляет память и не может полностью разрушиться.
Но это код VBA (то есть подсчитанный по ссылке ), более того, код VBA, который использует объекты, которыми управляет приложение хоста - эти объекты умрут, когда приложение хоста закроется, и когда это произойдет, Контекст выполнения VBA давно отсутствует.
Другими словами, все эти Set ... = Nothing
инструкции полностью избыточны.
В некоторых конкретных случаях, когда вы имеете дело со сторонней библиотекой API / типов, возможно, что объекты не очищаются полностью. Например, вы можете создать экземпляр Access.Application
и обнаружить, что «призрачный» процесс ACCESS.EXE остается открытым в диспетчере задач даже после выхода из Excel: это признак того, что вы как-то, где-то и где-то пропускаете ссылку на объект, и Set ... = Nothing
может помочь предотвратить это.
Однако я бы не рекомендовал систематически обнулять все ссылки на объекты подобным образом. Только когда не делает это вызывает проблему. И даже тогда это будет один или два объекта, которые тянут все вниз, а не все из них . Если ACCESS.EXE правильно завершает работу, нет причин загромождать код такими инструкциями.
Также помогает избежать хранения ссылок на объекты в глобальном состоянии. Если все локально, теоретически все задействованные объекты уничтожаются, как только выходит из локальной области видимости.