Ответ 1
Другим способом обеспечения надлежащего уничтожения объекта является его ссылка на объект на блок With
(т.е. не объявлять локальную переменную):
Sub Test()
With New FileSystemObject
MsgBox .Drives.Count
End With
End Sub
Объект существует только внутри блока With
, и когда выполнение достигает маркера End With
, если вы попробуете его с помощью специального модуля класса, вы заметите, что обработчик класса Class_Terminate
работает эффективно подтверждая надлежащее разрушение объекта.
Что касается As New
quirk, как уже было объяснено, если вы намерены установить ссылку на объект Nothing
внутри этой области, не объявляйте он с As New
, потому что VBA установит ссылку на объект на Nothing
, но также с радостью ( "полезно" ) создаст для вас новый экземпляр, как только вы снова ссылаетесь на него, только убедитесь, что объект Is Nothing
.
С другой стороны, это (раздражающее) контр-интуитивное поведение является тем, что стоит за аргументами Rubberduck Объект переменная - это самоподписанный контроль кода:
(обратите внимание: если у вас есть код, который вы хотите проверить, знайте, что он быстрее выполняет намного в фактическом VBE, чем на веб-сайте)
(если уже не было ясно: я сильно вовлечен в проект Rubberduck)