Лекция 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