При автоматизации другого приложения Office память может «связываться» по разным причинам.Одним из важных факторов является управление объектами , которые использовался кодом.В какой-то момент их нужно «освободить», чтобы освободить память.Если их неправильно утилизировать, они могут оставить приложение открытым (даже если оно не видно) и вызвать проблемы.
Одной из возможных проблем может быть многократное создание экземпляра xlSheet
,Поскольку ему всегда присваивается один и тот же лист, это нужно сделать только один раз.Если вы хотите повторно использовать объект (для другого объекта) и у кода возникают проблемы, сначала установите для этого объекта значение Nothing
, прежде чем назначать ему другой объект.(Обычно это не нужно, но иногда это помогает.)
Код в вопросе выполняется в Excel и использует несколько объектов Word.Эти объекты Word могут стать проблемой (объекты Excel выйдут из области видимости после завершения процедуры).Следовательно, хорошей практикой кодирования является установка объекта на Nothing
, как только он больше не нужен.
Пример кода из вопроса для иллюстрации:
With objWord 'a Word document
objUndo.EndCustomRecord
.Undo
Set objUndo = Nothing '<---- Release Word objects in Excel code
Set objRng = Nothing
.Application.Quit False '<---- Please close Word application
End With
Set objWord = Nothing '<---- Please free up objWord
End Sub