Иллюстрированный самоучитель по Access 2002

       

Иерархия объектов VBA приложения Microsoft Word


Так же как и при использовании объектной модели Microsoft Excel, познакомимся сначала с некоторыми объектами объектной модели Microsoft Word.

Объект Application — ссылается на активное приложение Microsoft Word. Через этот объект можно получить доступ ко всем остальным объектам модели. Объект Application имеет свойства ActiveDocument и ActiveWindow, которые представляют собой активный документ и активное окно соответственно. Можно указать Word.Application в качестве значения аргумента <класс> функций CreateObject() и GetObject() И В операторе Dim <объектнаяПеременная> As New <класс>.

Объект Document — является глобальным объектом и, так же как и объект Application, может использоваться в коде автоматизации в качестве значения аргумента <класс> функций CreateObject() и GetObject() и в операторе Dim <объектнаяПеременная> As New <класс>. Семейство Documents представляет собой набор всех документов, открытых в Word.

Объект Selection — представляет собой выделенную область в окне документа Word или точку вставки. Каждый документ может иметь только одну область выделения, и только одна область выделения открытых документов может быть активна в некоторый момент времени. Это означает, что всегда существует только один объект Selection. Объект Selection подчинен объекту Application, a создается при применении метода Select к объекту Document.

Семейство windows объекта Application представляет собой набор всех окон приложения Word.

Семейство Bookmarks подчинено объекту Document, и каждый объект этого семейства представляет собой закладку в документе.

Объект Range представляет собой непрерывную область текста в документе Word. Диапазоны, как и закладки, используются для идентификации текста в документе, однако, в отличие от закладок, диапазоны существуют только во время выполнения процедур VBA. Диапазоны не зависят от области выделения в документе. Можно работать с диапазоном, не затрагивая области выделения. Диапазонов в документе может быть несколько.




Открытие документа Word


Для того чтобы открыть документ 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


Содержание раздела