Для того чтобы открыть документ Word, можно использовать любой из перечисленных ранее способов создания экземпляров класса объекта автоматизации. Ниже приводятся примеры процедур VBA для открытия документа. В первой используется функция CreateObject (), а во второй — GetObject(). Для проверки кода этих процедур вы можете, так же как и при работе с объектами приложения Excel, использовать окно отладки.
Sub OpenDocument()
Dim wda As Word.Application
Set wda = CreateObject("Word.Application")
With wda
.Visible = True
.Documents.Open "C:\Doc\Letter.doc"
End With
'операции над документом wda.Quit Wda.Nothing
End Sub
В данном случае независимо от того, запущен ли уже Word, программа запустит еще один его экземпляр и в нем откроет файл Letter.doc. После того как все операции с документом закончены, нужно закрыть Word, для чего используйте метод Quit. Если при этом документ был изменен, то приложение Word выдаст сообщение, спрашивающее о том, нужно ли сохранить изменения. При этом программа приостанавливает выполнение и ждет указания пользователя. Таких ситуаций следует избегать.
Если все изменения делались программно, то лучше сначала закрыть документ, выполнив команду
wda.ActiveDocuments.Close False
Окно документа будет закрыто, при этом все изменения будут сохранены. Если же нужно, чтобы пользователь мог посмотреть сделанные программой изменения и при необходимости что-то откорректировать, можно не закрывать приложение в программе, а предоставить сделать это пользователю.
В следующей процедуре для открытия документа используется функция Getobject (). То есть сначала делается попытка проверить, не запущен ли уже Word. Если он еще не запущен, будет сгенерирована ошибка (код ошибки: 429). Программа перехватит эту ошибку и использует функцию CreateObject(), чтобы запустить Word. Если Word уже запущен, то новый документ будет открыт в этом же экземпляре приложения. Затем документ выводится на печать, после чего закрывается либо документ, либо приложение в зависимости от значения флага (modeFlag). Значение флага показывает, запускался ли экземпляр Word, или документ был добавлен к другим открытым документам:
Sub OpenPrintDocument() Dim wda As Word.Application
Dim modeFlag As Boolean
On Error GoTo ErrStartWord
modeFlag = True 'устанавливаем флаг операции
Set wda = GetObjectf, "Word.Application")
With wda
.Visible = True
.Documents.Open "C:\Doc\Letter.doc"
.ActiveDocument.Printout
Do While .BackgroundPrintingStatus <> 0
DoEvents "ждем, пока документ напечатается
Loop
If modeFlag Then
.ActiveDocument.Close 'закрываем только документ
Else
.Quit 'закрываем все приложение
End If
End With
Set wda = Nothing Exit Sub
ErrStartWord:
If Err.Number = 429 Then ' Word не запущен
Set wda = CreateObject("Word.Application")
modeFlag = False 'сбрасываем флаг
Resume Next 'возвращаемся к оператору, следующему за
'тем, который вызвал ошибку Else
'выдаем диалоговое окно с сообщением и номером ошибки
MsgBox Err.Description & " " & Err.Number, vblnformation
Exit Sub ' выходим из процедуры
End If
End Sub