Создание объекта в VBA может производиться разными способами. Самый простой способ выглядит так:
Dim oApp As Object
Set oApp = CreateObject("Word.Application")
MsgBox oApp.UserName
Это так называемое позднее связывание (late binding). Вначале мы объявляем переменную оАрр с возможностью ссылаться на любой объект, а затем присваиваем ей ссылку на создаваемый нами объект Word.Application. Такое позднее связывание хуже с точки зрения производительности и расхода оперативной памяти, кроме того, редактор Visual Basic отказывается нам подсказывать, какие свойства и методы есть у этого объекта. Поэтому позднее связывание имеет смысл использовать только тогда, когда вы собираетесь хранить в этой переменной, согласно логике вашей программы, объекты разных типов. В остальных ситуациях предпочтительнее использовать раннее связывание (early binding):
Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")
MsgBox oApp.UserName
В этом случае мы сразу присваиваем переменной оАрр тип Word.Application, a потом присваиваем ей ссылку на создаваемый нами объект. Можно обойтись и без второй строки:
Dim oApp As New Word.Application
MsgBox oApp.UserName
Однако ключевое слово New не может использоваться при создании зависимых объектов, с ключевым словом WithEvents и при создании переменных встроенных типов (String, Integer и т. п.), поэтому иногда необходимо использовать только объявление с Set. Кроме того, в языке VBScript синтаксической конструкции New нет, поэтому если вы собираетесь использовать оба языка, лучше сразу привыкать к конструкции CreateObject(). Но поскольку конструкция с New короче, в VBA традиционно чаще используется именно она.
Еще одна возможность создания объекта — воспользоваться методом другого объекта, который создаст нужный нам объект и возвратит ссылку на него напрямую или через коллекцию:
Dim oApp As New Word.Application
oApp.Documents.Add
Dim oDoc As Word.Document
Set oDoc = oApp.Documents(1)
oDoc.SaveAs "C:\docvbal.doc"
В этом примере мы вначале создаем объект Word.Application, затем при помощи метода Add() коллекции Documents создаем в этой коллекции новый документ, потом получаем на него ссылку для переменной oDoc, а потом вызываем метод SaveAs() созданного нами объекта документа.
Удаление объектов производится очень просто:
Set Объектная_переменная = Nothing
например:
Set oDoc = Nothing
В принципе, объект можно и не удалять — он будет удален автоматически после того, как последняя объектная переменная, которая на него ссылается, уйдет за область видимости (обычно когда закончит работу процедура, в которой он используется). Однако явное удаление объектов — это "правило хорошего тона", которое позволит вам при создании серьезных приложений избежать конфликтов имен и перерасходования ресурсов.
Еще один момент, связанный с удалением объектов. Не все объекты можно удалить при помощи синтаксической конструкции Nothing. Некоторые объекты требуют, чтобы их удаляли из памяти специальным способом. Например, для удаления из памяти объекта приложения Word, который мы создавали в нашем примере, нужно обязательно вызвать его метод Quit(), иначе он выдаст сообщение об ошибке.