Лекция 6. Объекты Microsoft Word

advertisement
Лекция 6. Объекты Microsoft Word
Лекция 6. Объекты Microsoft Word
Document представляет открытый документ,
Bookmark — закладку в документе,
Selection — фрагмент, выделенный в одной из секций окна документа.
Работа с объектом Application
Запуская Word, Вы автоматически создаете объект Application.
Application. PrintPreview = True
Некоторые свойства объекта Application
свойство DisplayStatusBar установлено как True, строка состояния видима;
свойство WindowState содержит значение wdWindowStateMaximize, окно приложения развернуто.
With Application
.WindowState = wdWindowStateNormal
.Height = 450
.Width = 600
End With
набору Windows (представляет открытые в данный момент окна)
Documents (представляет открытые в данный момент документы).
Примечание: Объект Options включает ряд свойств, управляющих поведением всего приложения Word.
With Application.Options
.AIIowDragAndDrop = True
.ContirmConversions = False
.MeasurementUnit = wdPoints
End With
Работа с объектом Document
Set myDoc = Documents("Report.doc")
Set myDoc = Documents(1)
If Documents. Count >= 1 Then
MsgBox ActiveDocument. Name
Else
MsgBox "No documents are open"
End If
Set myDoc = Documents. Open(FileName := "TEST.DOC")
Dialogs(wdDialogFileOpen ). Show
Set dig = Dialogs(wdDialogFileOpen)
aButton = dig. Display
fSelected = dig. Name
If aButton = -1 Then
Documents. Open FileName: Selected
End If
Dim myDoc As Document
Set myDoc = Documents. Add
myDoc. PageSetup.TopMargin = lnchesToPoints(1.25)
ActiveDocument. SaveAs Filename := "Temp.doc"
Documents.Add.SaveAs FileName:="1996 Sales.doc"
Documents("1996 Sales.doc").Tables.Add _
Ranges := Selection. Range, NumRows:=2, NumColumns:=4
Documents( "Sales, doc"). Save NoPrompt := True
Documents( "MyDocument.doc"). Activate
Options. PrintHiddenText = True
ActiveDocument. PrintOut Range:=wdPrintFromTo, From:="1", To:="3"
Documents("Sales.doc"). Close SaveChanges := wdSaveChanges ‘wdDoNotSaveChanges
MsgBox ActiveDocument. Tables. Count & " tables in this document"
Set myTable = Documents('Sales.doc").Tables(1)
ActiveDocument. Tables. Add Range:=myRange, NumRows:=3, NumColumns:=3
ActiveDocument. Footnotes. Add Range := myRange, Text := "The Willow Tree"
Полный список наборов, поддерживающих метод Add, см. в разделе «Add Method» справочной системы.
Работа с объектом Range
При программировании на Visual Basic часто приходится определять в документе некую область, а затем
выполнять над ней какую-либо операцию (например, вставлять в нее текст или изменять форматирование).
Допустим, Вам нужен макрос, который отыскивает в какой-то части документа определенное слово или фразу.
Представить эту часть позволяет объект Range. С помощью его свойств и методов Вы измените содержимое
соответствующего диапазона.
Объект Range представляет непрерывную область в документе. Каждый объект Range определяется позициями
первого и последнего символов. Вы используете эти объекты в процедурах Visual Basic так же, как и закладки в
документах, — для идентификации определенных частей документа. Объект Range может представлять
1
Лекция 6. Объекты Microsoft Word
произвольный диапазон — от курсора ввода до целого документа. Но в отличие от закладки объект Range
существует лишь в период выполнения процедуры, в которой он определен.
Объекты Range не зависят от выделенного фрагмента — Вы можете определять и модифицировать диапазон, не
изменяя выделенного фрагмента. Кроме того, в тексте можно выделить только один фрагмент, а на количество
диапазонов никаких ограничений не накладывается.
Свойства Start, End и StoryType уникально идентифицируют объект Range. Свойства Start и End позволяют
получить или установить начальные и конечные символьные позиции объекта Range. Символьная позиция, равная
0, соответствует началу области (story), 1 — позиции за первым символом и т. д. Всего определены 11 различных
типов областей, представляемых wdStoryТуре-константами свойства StoryType. Например, если объект Range
находится в области сносок, свойство StoryType вернет значение wdFootnotesStory (подробнее см. раздел «Работа
с областями» далее в этой главе).
Применение объекта Range вместо объекта Selection
Записав несколько макросов средствами Word и проанализировав их текст, Вы наверняка заметите, что в них
часто используется свойство Selection для управления объектом Selection. Но ту же задачу можно решить, применяя
один или несколько объектов Range; при этом макрос получается компактнее и, как правило, эффективнее. Вот
макрос, записанный средствами Word (в нем первые два слова документа выделяются полужирным начертанием):
Selection. HomeKey Unit := wdStory
Selection. MoveRight Unit := wdWord, Count := 2, Extend := wdExtend
Selection. Font. Bold = wdToggle
А теперь то же самое без объекта Selection:
ActiveDocument. Range( Start := 0, End := ActiveDocument. Words(2). End). Bold =True
В следующем примере после выделения первых двух слов документа полужирным начертанием шрифта
вставляется новый абзац:
Selection. HomeKey Unit:=wdStory
Selection. MoveRight Unit := wdWord, Count:=2, Extend := wdExtend
Selection. Font. Bold = wdToggle
Selection. MoveRight Unit := wdCharacter, Count := 1
Selection. TypeParagraph
И то же самое с помощью объекта Range:
Set myRange = ActiveDocurnent. Range(Start :=0, End := ActiveDocurnent. Words(2).End)
myRange. Bold = True
myRange. InsertParagraphAfter
В большинстве случаев объекты Range предпочтительнее объекта Selection по следующим причинам:
 Вы можете определить и использовать несколько объектов Range, тогда как в каждом окне документа
может быть только один объект Selection.
 Операции с объектами Range не изменяют выделенный текст.
 Операции с объектами Range проходят быстрее, чем с выделенным фрагментом.
Получение объекта Range методом Range
Для создания объекта Range в документе предназначен метод Range объекта Document. Этот метод возвращает
объект Range, размещенный в основной области (main story) и представляющий заданный диапазон. В следующем
примере мы создаем объект Range и присваиваем его переменной myRange:
Set myRange = ActiveDocurnent. Range( Start:=0, End:=10)
Здесь myRange представляет первые 10 символов активного документа. В следующем примере к первым 10
символам активного документа применяется полужирное начертание:
Set myRange = ActiveDocument. Range(Start:=0, End:=10) myRange. Bold = True
Создав специальную переменную myRange и закрепив за ней объект Range оператором Set, мы получили
возможность многократно ссылаться на этот объект в своей программе. Если же объект нужен только для
однократного использования, создавать отдельную переменную для его хранения нет никакого смысла. В таком
случае создание диапазона и операцию над ним лучше свести в одну инструкцию:
ActiveDocument. Range(Start:=0. End:=10).Bold =True
По аналогии с закладкой диапазон может как охватывать группу символов, так и просто помечать какое-то
место в документе. В следующем примере начальная и конечная границы объекта Range совпадают и диапазон не
содержит никакого текста — он создается только для вставки текста в начало активного документа:
ActiveDocument. Range ( Start :=0, End : =0) . InsertBefore Text : = " Hello"
Начальную и конечную границы диапазона можно определить, используя символьные позиции (как в
предыдущем примере) или свойства Start и End объектов Selection, Bookmark или Range. Создадим объект
Range, ссылающийся на третье и четвертое предложения в активном документе:
Set myDoc = ActiveDocument
Set myRange = myDoc. Range (Start := myDoc. Sentences(3).Start, _
End := myDoc. Sentences(4).End)
aRange. Select
Совет: Объект Range не имеет визуального представления в документе. Чтобы убедиться, на правильный ли
диапазон текста ссылается объект Range, . воспользуйтесь методом Select — он выделит соответствующий
фрагмент текста. В следующем примере объект Range ссылается на первые три абзаца активного документа.
После выполнения показанных ниже инструкций на экране будет выделен диапазон текста, содержащийся в
переменной aRange.
Set aRange = ActiveDocument.Range(Start := 0, _
End := ActiveDocument. Paragraphs(3). Range. End)
aRange. Select
Получение объекта Range через свойство Range
2
Лекция 6. Объекты Microsoft Word
Свойство Range есть у многих объектов (скажем, у Paragraph, Bookmark, Endnote или Cell) и возвращает объект
Range. В следующем примере мы получаем объект Range, который ссылается на первый абзац активного
документа:
Set myRange = ActiveDocument. Paragraphs(1). Range
Получив ссылку на объект Range, Вы можете использовать его свойства и методы для манипуляций с
соответствующим диапазоном. Например, чтобы скопировать первый абзац активного документа:
Set myRange = ActiveDocument. Paragraphs(1). Range
myRange. Copy
А чтобы скопировать первую строку из первой таблицы активного документа:
ActiveDocument. Tables(1). Rows(1). Range. Copy
В следующем примере мы отображаем текст (активного документа), отмеченный первой закладкой (применяется
свойство Range объекта Bookmark):
MsgBox ActiveDocument. Bookmarks(1). Range. Text
Оператор With...End With позволяет заметно упростить многократное обращение к свойствам и методам объекта
Range. В следующем примере форматируется текст в первом абзаце активного документа:
Set myRange = ActiveDocument. Paragraphs(1). Range
With myRange
.Bold = True
.ParagraphFormat. Alignment = wdAlignParagraphCenter
.Font. Name = "Arial"
End With
Дополнительные примеры, иллюстрирующие применение свойства Range, см. в разделе «Range Property»
справочной системы.
Изменение части документа
Visual Basic включает объекты, позволяющие изменять такие элементы документа, как символы, слова,
предложения, абзацы и разделы. Свойства, соответствующие этим элементам, и объекты, возвращаемые
ими, показаны в таблице:
Выражение
Возвращаемый объект
Words(index)
Range
Characters(index)
Range
Sentences(index)
Range
Paragraphs(index)
Paragraph
Sections(index)
Section
Используя эти свойства без указания индекса. Вы получаете одноименные наборы (например, свойство Paragraphs
возвращает набор Paragraphs). Но задав индекс, Вы получите объект, указанный во второй колонке приведенной
выше таблицы (например, Words(1) вернет объект Range). Для изменения объекта Range можно задействовать его
свойства и методы — как в следующем примере, в котором первое слово выделенного фрагмента копируется в
буфер обмена.
Selection. Words(1). Copy
Наборы Paragraphs и Sections содержат объекты Paragraph и Section соответственно, а не объекты Range. Однако
свойство Range (возвращающее объект Range) предусмотрено и в этих двух объектах. В следующем примере
первый абзац активного документа копируется в буфер обмена:
ActiveDocument. Paragraphs(1). Range. Copy
Свойства, перечисленные в предыдущей таблице, имеются также у объектов Document, Selection и Range. С их
помощью можно установить регистр букв, например, в первом слове в активном документе:
ActiveDocument. Words(1). Case = wdUpperCase
или задать нижнее поле для первого выделенного раздела равным, допустим 0.5 дюйма:
Selection. Sections(1). PageSetup. BottornMargin = lnchesToPoints(0.5)
А в этом примере мы устанавливаем двойной межстрочный интервал. Для текста активного документа (свойство
Content возвращает объект Range представляющий основную область документа):
Active Document. Content. ParagгаphFormat. Space2
Получение и изменение текста в диапазоне
Свойство Text объекта Range позволяет получить или изменить содержимое этого объекта. В следующем примере
возвращается первое слово в активном документе:
strText = ActiveDocument. Words(1). Text
Чтобы заменить первое слово в активном документе на «Hello»:
ActiveDocument. Words(l). Text = "Hello"
Для вставки текста до или после текста, входящего в диапазон, применяются методы InsertAfter и InsertBefore. В
следующем примере мы вставляем текст в начало второго абзаца активного документа:
ActiveDocument. Paragraphs(2). Range. InsertBetore Text := "ln the beginning"
После вызова метода InsertAfter или InsertBefore диапазон расширяется, включая в себя добавленный текст. В то
же время метод Collapse позволяет «свернуть» диапазон к его началу или концу. В следующем примере мы
вставляем слово «Hello» перед существующим текстом и «сворачиваем» диапазон к его началу (т. е. перед словом
«Hello»):
With ActiveDocument. Paragraphs(2). Range
.InsertBefore Text := "Hello "
.Collapse Direction := wdCollapseStart
End With
Форматирование текста в диапазоне
Свойство Font обеспечивает доступ к свойствам и методам, связанным с форматированием символов, а свойство
3
Лекция 6. Объекты Microsoft Word
ParagraphFormat — к тем, что связаны с форматированием абзацев. В следующем примере мы применяем
форматирование обоих видов к первому абзацу активного документа:
With ActiveDocument. Paragraphs(2). Range
.Font. Name = "Times New Roman"
.Size = 14
.AllCaps = True
End With
With ActiveDocument. Paragraphs(1). Range. ParagraphFormat
.LeftIndent = lnchesToPoints(0.5)
.Space1
End With
Перебор абзацев в диапазоне
Set myDoc = ActiveDocument
Set myRange = rnyDoc.Range(Start := myDoc.Paragraphs(1).Range.Start, _
End:=myDoc. Paragraphs(5). Range. End)
For Each para In myRange. Paragraphs
para. Range. InsertBefore "Question:" & vbTab
Next para
Использование свойства или метода Next
Set myRange = ActiveDocument. Paragraphs(1). Range
For i = 1 To 5
If myRange.Paragraphs(1).Alignment = wdAlignParagraphCenter Then
myRange.Paragraphs(1).Alignment = wdAlignParagraphLeft
End If
Set myRange = myRange. Paragraphs(1). Next. Range
Next i
Работа с областями
Область (story) содержит диапазон текста, отличного от того, что содержат другие текстовые области этого
документа. Если документ, скажем, включает основной текст, сноски и верхние колонтитулы, он содержит
область основного текста, область сносок и область верхних колонтитулов. Всего определено 11 типов областей,
которым соответствуют следующие wdStoryType-константы: wdCommentsStory, wdEndnotesStory,
wdEvenPagesFooterStory, wdEvenPagesHeaderStory, wdFirstPageFooterStory, wdFirstPageHeaderStory,
wdFootnotesStory, wdMainTextStory, wdPrimaryFooterStory, wdPrimaryHeaderStory и wdTextFrameStory.
Свойство StoryType позволяет определить тип области для конкретного диапазона, выделенного фрагмента или
закладки. В следующем примере секция сносок в активном окне закрывается, если выделенный фрагмент
находится в области сносок:
ActiveWindow. View. Type = wdNormalView
If Selection. StoryType = wdFootnotesStory Then ActiveWindow. ActivePane. Close
Набор StoryRanges содержит первый диапазон области для каждого типа области из числа имеющихся в
документе. Используя метод NextStoryRange можно получить доступ к последующим областям. Вот пример
поиска текста «Microsoft Word» в каждой области активного документа и выделения курсивом найденных
вхождений этого текста:
For Each myStoryRange In ActiveDocument. StoryRanges
myStoryRange. Find. Execute FindText = ''Microsoft Word", Forward := True
While myStoryRange. Find. Found
myStoryRange. Italic = True
myStoryRange. Find. Execute FindText := ''Microsoft Word", _
Forward := True, Format := True
Wend
While Not (myStoryRange. NextStoryRange Is Nothing)
Set myStoryRange = myStoryRange. NextStoryRange
myStoryRange. Find. Execute FindText := "Microsoft Word". Forward:=True
While myStoryRange. Find. Found
myStoryRange. Italic = True
myStoryRange.Find.Execute FindText:="Microsott Word", _
Forward:=True, Format:=True
Wend
Wend
Next myStoryRange
Работа с объектом Selection
Работая с документом в Word, Вы обычно выделяете текст, а затем выполняете какое-то действие (например,
форматируете существующий текст или вводите вместо него новый). В Visual Basic практически нет
необходимости выделять текст перед его изменением — достаточно создать объект Range, ссылающийся на
нужную часть документа. Но, когда в своей программе Вам все же понадобится получить или изменить
выделенный фрагмент, объект Selection предоставит Вам эту возможность.
Чтобы получить доступ к объекту Selection, используйте свойство Selection. В каждой секции окна документа
может быть единственный объект Selection, и только один такой объект может быть активен в данный момент.
Выделенный фрагмент может охватывать определенную часть документа или маркировать точку ввода текста. В
следующем примере изменяется формат выделенных абзацев:
Selection. Paragraphs. SpaceBetore = lnchesToPoints(0.25)
4
Лекция 6. Объекты Microsoft Word
Свойством Selection наделены объекты Application, Window и Pane. Если Вы используете это свойство с
объектом Application, объект Selection ссылается на активный выделенный фрагмент. В следующем примере мы
вставляем текст после выделенного фрагмента (так как Selection — свойство глобальное, свойство Application
можно опустить):
Selection. InsertAfter Text := "Next Text"
Свойство Selection, используемое с объектами Window или Pane, возвращает объект Selection для указанного
окна или секции окна. В следующем примере через свойство Selection объекта Window вставляется текст в окно
документа Document2:
Windows( "Document2"). Selection. InsertAfter Text := "New Text"
А в этом примере через свойство Selection объекта Pane вставляется текст секцию верхнего колонтитула:
With ActiveWindow
.View. Type = wdPageView
.View. SeekView = wdSeekPrirnaryHeader
.ActivePane. Selection. InsertAfter Text := "Header"
End With
После применения методов InsertAfter и InsertBefore выделенный фрагмент расширяется, с тем чтобы включить
добавленный текст. Метод Collapse позволяет «свернуть» диапазон к его началу или концу. В следующем
примере после выделенного текста вставляется слово «Hello», а затем выделенная фрагмент «сворачивается» к
позиции ввода за словом «Hello»:
Selection. InsertAfter Text := "Hello"
Selection. Collapse Direction := wdCollapseEnd
Перемещение и расширение выделенного фрагмента
Перемещать или расширять границы выделенного фрагмента, представимого объектом Selection, можно
несколькими способами (например, методом Move или MoveEnd). В следующем примере выделенный фрагмент
перемещается к началу следующего абзаца:
Selection. MoveDown Unit := wdParagraph, Count :=1, Extend := wdMove
Перемещения или расширения границ выделенного фрагмента можно добиться и изменением значений свойств
Start и End объекта Selection или применением методов MoveStart и MoveEnd. В следующем примере
выделенный фрагмент расширяется до конца абзаца:
Selection. MoveEnd Unit := wdParagraph, Count:=1
Поскольку в окне или секции окна документа может быть лишь один выделенный фрагмент, переместить его
можно и простым выделением другого объекта методом Select. После этого Вы получите объект Selection через
свойство Selection. Например, выделим в активном документе первое слово и заменим на «Hello»:
ActiveDocument.Words(1). Select
Selection.Text := "Hello"
Переместить выделенный фрагмент позволяют и методы GoToNext, GoToPrevious или GoTo. В этом примере
выделяется четвертая строка документе:
Selection. GoToWhat := wdGoToLine, Which := wdGoToAbsolute. Count :=4
А здесь выделенный фрагмент перемещается к следующему полю в активном документе:
Selection. GoToNext What := wdGoToField
Объекты, доступные через объект Selection
Многие из объектов, доступные через объекты Range и Document, доступны и через объект Selection, позволяя
управлять объектами в выделенном фрагменте. Полный список этих объектов приведен в разделах «Microsoft
Word Objects (Selection)» и «Selection Object» справочной системы.
В следующем примере в выделенном фрагменте обновляются поля:
if Selection. Fields. Count >= 1 Then Selection. Fields. Update
А в этом — создается абзацный отступ на 0.5 дюйма:
Selection. Paragraphs. LeftIndent = lnchesToPoints(0.5)
Если Вам не нужны все объекты в наборе, Вы можете воспользоваться циклом For Each...Next для перебора
отдельных объектов выделенного фрагмента. В следующем примере организован перебор абзацев выделенного
фрагмента, при этом все абзацы, выровненные по центру, выравниваются по левому краю:
For Each para In Selection. Paragraphs
If para.Alignment = wdAlignParagraphCenter Then para.Alignment = _
wdAlignParagraphLeft
Next para
А так можно перечислить имена всех закладок в выделенном фрагменте:
For Each aBook In Selection. Bookmarks
MsgBox aBook. Name
Next aBook
Свойства и методы объекта Selection
В этом разделе рассматриваются некоторые из наиболее часто используемых свойств и методов объекта Selection.
Получение или изменение текста в выделенном фрагменте
Свойство Text позволяет получить или установить содержимое объекта Selection. Чтобы получить выделенный
текст:
strText = Selection. Text
А чтобы заменить выделенный текст на фразу «Hello world»:
Selection. Text = "Hello world"
Методы InsertBefore и InsertAfter позволяют вставлять текст перед выделенным фрагментом или после него. В
следующем примере текст вставляется перед выделенным фрагментом:
Selection. InsertBefore Text := "And furthermore"
5
Лекция 6. Объекты Microsoft Word
Форматирование выделенного текста
Свойство Font открывает доступ к свойствам и методам, связанным с форматированием символов, а свойство
ParagraphFormat — к свойствам и методам связанным с форматированием абзацев. В следующем примере мы
устанавливаем оба вида форматирования для выделенного фрагмента:
With Selection. Font
.Name = "Times New Roman"
.Size = 14
End With
Selection. ParagraphFormat. LeftIndent = lnchesToPoints(0.5)
Получение объекта Range
Если Вам понадобились какие-то свойства и методы, предусмотренные для объекта Range, но отсутствующие у
объекта Selection (например, метод CheckSpelling), обратитесь к объекту Range через свойство Range объекта
Selection. Например, чтобы проверить правописание выделенных слов:
Selection. Range. CheckSpelling
Получение информации о выделенном фрагменте
Для этого предназначено свойство Information. С его помощью можно определить номер текущей страницы,
общее количество страниц в документе, а также выяснить, не находится ли выделенный фрагмент в верхнем или
нижнем колонтитуле. Свойство Information принимает в качестве параметра 35 констант (в том числе
wdActiveEndPageNumber, wdNumberOfPagesInDocument, wdInHeaderFooter), которые позволяют получать
различные виды информации о выделенном фрагменте. В следующем примере мы проверяем, находится ли
выделенный фрагмент в таблице, и, если да, сообщаем количество строк и столбцов в таблице:
If Selection. lnformation(wdWithlnTable) = True Then
MsgBox "Columns = " & Selection. lntormation(wdMaximumNumberOfCoiumns)
& vbCr & "Rows = " & Selection. lntormation(wdMaximumNumberOfRows)
End If
Полный список этих констант и их описание см. в разделе «Information Property» справочной системы.
Проверка наличия выделенного текста
Свойство Type позволяет узнать или изменить способ, которым выделенный фрагмент обозначается в документе.*
Указав, допустим, константу wdSelectionBlock, можно определить, есть ли в документе блок выделенного текста.
В следующем примере мы выделяем абзац, в котором находится курсор ввода:
If Selection. Type = wdSelectionIP Then
Selection. Paragraphs(1). Range. Select
End If
Работа с объектами Find и Replacement
Поиск и замену текстовых диапазонов в документе обеспечивают объекты Find и Replacement. Объект Find
доступен из объекта Selection или Range (характер поиска зависит от того, какой из этих двух объектов Вы
задействовали).
Использование Selection .Find
Если Вы обращаетесь к объекту Find через объект Selection, то выделенным фрагментом становится
найденный текст. В примере, приведенном ниже, выделяется следующее вхождение слова «Hello» (если оно
не встретится до конца документа, поиск прекратится):
With Selection. Find
.Forward = True
.Wrap = wdFindStop
.Text = "Hello"
. Execute
End With
Объект Find включает свойства, соответствующие параметрам в диалоговом окне Find and Replace (Найти
и заменить) из меню Edit (Правка). Вы можете устанавливать эти свойства индивидуально или через
аргументы метода Execute, как показано здесь:
Selection .Find. Execute FindText := "Hello", Forward := True, Wrap := wdFindStop
Использование Range. Find
Если Вы обращаетесь к объекту Find через объект Range, то текущий выделенный фрагмент так и остается
выделенным — меняется диапазон, на который ссылается объект Range. В следующем примере мы
отыскиваем первое вхождение слова «blue» в активном документе и, если оно найдено, применяем к нему
полужирное начертание шрифта:
With ActiveDocument. Content. Find
.Text = "blue"
.Forward = True/
. Execute
If .Found = True Then .Parent. Bold = True
End With
А вот как сделать то же самое, используя аргументы метода Execute:
Set myRange = ActiveDocument. Content
Прим. перев.: эта информация ошибочна. Свойство Type сообщает, что именно выделено в документе: блок
(wdSelectionBlock), колонка (wdSelectionColumn), кадр (wdSelectionFrame) или вообще ничего не выделено
(wdNoSclection). Кроме того, свойство Type предназначено только для чтения, и поэтому что-то изменить с его помощью
нельзя.
*
6
Лекция 6. Объекты Microsoft Word
myRange.Find.Execute FindText := "blue", Forward = True
If myRange. Find. Found = True Then myRange. Bold = True
Использование объекта Replacement
Объект Replacement представляет критерии замены для операции поиска и замены. Его свойства и методы
соответствуют параметрам в диалоговом окне Find and Replace (Найти и заменить) из меню Edit (Правка).
Объект Replacement доступен через объект Find. В следующем примере заменяются все вхождения «hi» на
«hello». Поскольку доступ к объекту Find осуществляется через объект Selection, то выделенным
фрагментом становится найденный текст.
With Selection. Find
.ClearFormatting
.Text = "hi"
.Replacement. ClearFormatting
.Replacement. Text = "hello"
.Execute Replace := wdReplaceAII, Forward := True, Wrap := wdFindContinue
End With
В следующем примере мы удаляем в активном документе полужирное начертание шрифта. Для этого
свойство Bold объекта Find устанавливается в True, а объекта Replacement — в False. Для поиска и замены
элементов форматирования укажите в качестве искомого и заменяющего текста пустые строки («») и
присвойте аргументу Format метода Execute значение True. Текущий выделенный фрагмент останется
таковым, поскольку доступ к объекту Find осуществляется через объект Range, возвращаемый свойством
Content.
With ActiveDocument. Content. Find
.ClearFormatting
.Font. Bold = True
With .Replacement
.ClearFormatting
.Font. Bold = False
End With
.Execute FindText := "", ReplaceWith := "", Format = True, Replace = wdReplaceAll
End With
Применение автоматизации
Вам может понадобиться, чтобы Ваше приложение не только работало с данными Word, но и обменивалось
ими с другими приложениями (например с Microsoft Excel, Microsoft PowerPoint или Microsoft Access). Для
взаимодействия с другими приложениями можно воспользоваться Автоматизацией (ранее известной как
OLE-автоматизация).
Работа с Word из других приложений
Автоматизация позволяет получать, редактировать и экспортировать данные ссылаясь на объекты, свойства
и методы другого приложения. Объекты приложения, на которые можно ссылаться из других приложений,
называются объектами Автоматизации (Automation objects). Чтобы Word был доступен из других
приложений через Автоматизацию, нужно прежде всего создать ссылку на библиотеку типов Word. Для
этого из меню Tools (Сервис) редактора Visual Basic выберите команду References (Ссылки), после чего
установите флажок в строке Microsoft Word 8.0 Object Library.
Затем объявите объектную переменную, которая будет ссылаться на объект Application Word:
Dim appWD As Word.Application.8
Далее используйте функции Visual Basic CreateObject или GetObject, передавая им в качестве параметра
программный OLE-идентификатор Word — Word. Application. 8 или Word. Document. 8, как показано в
следующем примере. Если Вы хотите, чтобы на экране появилось окно Word, установите свойство Visible
как True.
Dim appWD As Word. Application. 8
Set appWD = CreateObject("Word. Application. 8")
appWD. Visible = True
Функция CreateObject возвращает объект Application Word и присваивает его переменной appWD.
Обращаясь через эту переменную к объектам, свойствам и методам объекта Application, Вы сможете
контролировать работу Word. В следующем примере создается новый документ Word:
appWD. Documents. Add
Функция CreateObject начинает новый сеанс Word, который не прекращается даже при удалении объектной
переменной, ссылающейся на объект Аррlication. И присвоение ей значения Nothing работу Word тоже не
завершит. Поэтому Word следует закрывать методом Quit. В следующем примере для Microsoft Excel мы
вставляем данные из ячеек А1:В10 на первом листе в новый документ Word, а затем упорядочиваем данные
в таблице. Макрос проверяет, не был ли создан новый экземпляр Word вызовом функции CreateObject, и,
если да, закрывает его методом Quit. (Если функция GetObject возвращает ошибку с кодом 429, вызывается
функция CreateObject, и тем самым создается новый экземпляр Word.)
Dim appWD As Word. Application
Err.Number =0
On Error GoTo notloaded
Set appWD = Get0bject(, "Word. Application. 8")
notloaded:
If Err. Number = 429 Then
Set appWD = CreateObject("Word.Application. 8")
7
Лекция 6. Объекты Microsoft Word
theError = Err. Number
End If
appWD. Visible = True
With appWD
Set myDoc = .Documents. Add
With .Selection
For Each с In Worksheets("Sheet1").Range("A1:B10")
.InsertAfter Text := c. Value
Count = Count + 1
If Count Mod 2 = 0 Then
.InsertAtter Text := vbCr
Else
.InsertAfter Text := vbTab
End If
Next с
.Range. ConvertToTable Separator := wdSeparateByTabs
.Tables(1). AutoFormat Format := wdTableFormatClassic1
End With
myDoc. SaveAs FileName := "C:\Temp.doc"
End With
If theError = 429 Then appWD.Quit
Set appWD = Nothing
Работа с другими приложениями из Word
Для обмена данными с другим приложением из Word через Автоматизацию, надо прежде всего установить ссылку
на библиотеку типов этого приложения в диалоговом окне References (Ссылки). После этого объекты, свойства и
методы другого приложения появятся в окне Object Browser (Просмотр объектов), и Visual Basic сможет
автоматически проверять синтаксис инструкций при компиляции. Кроме того, Вы сможете получать контекстнозависимую справку по этим объектам, свойствам и методам.
Установив ссылку на библиотеку типов, объявите объектные переменные, ссылающиеся на объекты другого
приложения. В следующем примере мы объявляем такую переменную, указывающую на объект Application
Microsoft Excel:
Dim xlObj As Excel. Application. 8
Вызвав функцию CreateObject или GetObject, Вы получите ссылку на объект Автоматизации. После этого,
используя объекты, свойства и методы другого приложения, Вы сможете добавлять, изменять или удалять
соответствующую информацию. Закончив свои операции, закройте приложение. В следующем примере для
Word проверяется, запущен ли в данный момент Microsoft Excel. Если да, программа использует функцию
GetObject, нет — функцию CreateObject. Далее программа передает выделенный текст в первую ячейку на
первом листе активной рабочей книги Microsoft Excel. Завершая свою работу, программа очищает
объектную переменную, записывая в нее ключевое слово Nothing оператором Set.
Dim xlObj As Excel. Application. 8
If Tasks. Exists("Microsoft Excel") = True Then
Set xlObj = GetObject("Excel. Application. 8")
Else
Set xlObj = CreateObject("Excel. Application. 8")
End If
xlObj. Visible = True
If xlObj. Workbooks. Count = 0 Then xlObj. Workbooks. Add
xlObj.Worksheets("Sheet1"). Range("A1"). Value = Selection. Text
Set xlObj = Nothing
В следующем примере для Word проверяется, запущен ли в данный момент PowerPoint. Если да, программа
использует функцию GetObject, нет —функцию CreateObject. После этого программа создает новую
презентацию, первое текстовое поле которой содержит имя активного документа Word, а второе — текст
первого абзаца активного документа. Завершая свою работу программа очищает объектную переменную,
записывая в нее ключевое слово Nothing оператором Set.
Dim pptObj As PowerPoint. Application. 8
If Tasks. Exists( "Microsoft PowerPoint") = True Then
Set pptObj = GetObject(, "PowerPoint.Application.8")
Else
Set pptObj = CreateObject("PowerPoint.Application. 8")
End If
pptObj. Visible = True
Set pptPres = pptObj. Presentations. Add
Set aSlide = pptPres. Slides.Add(lndex:=1, Layout := ppLayoutText)
aSlide. Shapes(1).TextFrame. TextRange.Text = ActiveDocument.Name
aSlide. Shapes(2).TextFrarne. TextRange. Text = _
ActiveDocument. Paragraphs(1). Range. Text
Set pptObj = Nothing
8
Download