Работа с документами MS Word средствами VBA Гринчук
Работа с документами MS Word средствами VBA Гринчук АВ
2 Содержание Работа с приложением Word Работа с документом Word Работа с объектами документа
3 Основные решаемые задачи Автоматизация рутинных операций (макросы) Создание интерактивных документов Автоматическое форматирование документа, поиск и замена текста Обмен данными с другими приложениями
Особенности программной работы с Word Интенсивное использование активных элементов (кнопок, полей, полей со списком) Частое использование закладок Применение форм 4
5 Объектная модель Word
Объект Application 6 Word, шаблоны, надстройки, шрифты, …
7 Объекты Word.Application Documents и Templates - коллекции документов и шаблонов, являются центральными объектами MS Word. Объект AutoCorrect поддерживает средства автоматической корректировки текстов. По возможностям эквивалентен команде Автозамена( AutoCorrect) меню Cepвис(Tools). Объект Browser позволяет перемещаться по объектам в документе. По возможностям эквивалентен набору трех кнопок внизу вертикальной полосы прокрутки окна документа. Объект CommandBars - обеспечивает единую систему организации меню и панелей инфтрументов. Объекты Assistant и FileSearch - поддерживают системы организации справок и поиска.
8 Объекты Word.Application Объект FontNames позволяет получить список всех доступных шрифтов. Такие же возможности предоставляет команда Шрифт (Font) меню Формат (Format). Коллекция объектов Dialogs - совокупность диалоговых окон, встроенных в Word. Позволяют организовать диалог с пользователем по теме, заданной типом соответствующего окна. Объекты Languages, Dictionaries и SpellingSuggestion - позволяют установить язык, выбрать словарь и работать со списком слов, предлагаемых для исправления при обнаружении ошибок. Аналогичные функции предлагают команды Правописание (SpellingAndGrammar) и Язык (Language) меню Сервис. Объект ResentFiles позволяет работать со списком последних использовавшихся файлов. Объект System содержит информацию о характеристиках компьютера и операционной системы.
9 Поиск в папках With Application.FileSearch .LookIn = "D:\temp" .FileType = msoFileTypeWordDocuments .SearchSubFolders = True … … End With Пример ! Не работает в Windows 7
Пример 10
Документы Документы – основной объект приложения Word Word.Application.Documents(1) Разрешается использование сокращенного синтаксиса Documents(1) 11
Работа с документами 12
Замечание Значительно удобнее использовать имена документов: Documents("C:\Temp\Договор.doc") Причина: номер документа зависит от порядка открытия, от закрытия предыдущих документов … Активный в данный момент документ доступен по «адресу» ActiveDocument 13
14 Обращение к документам Открытие документа Set myDoc = Documents.Open(FileName := "TEST.DOC") Активация документа Documents("MyDocument.doc").Activate Способы обращения Set myDoc = Documents("Report.doc") Set myDoc = Documents(1)
15 Создание документа Для создания нового документа предназначен метод Add набора Documents: Documents.Add Метод Add возвращает объект Document, соответствующий созданному документу. Создадим документ и установим верхнее поле равным 1.25 дюйма: Dim myDoc As Document Set myDoc = Documents.Add myDoc.PageSetup.TopMargin = InchesToPoints(1.25)
16 Сохранение документа Впервые сохраняя документ, используйте метод SaveAs объекта Document ActiveDocument.SaveAs Filename := "Temp.doc" Для сохранения изменений в существующем документе служит метод Save объекта Document: Documents("Sales.doc").Save Можно сохранить все открытые документы без запросов об именах их файлов: Documents.Save NoPrompt := True
17 Использование диалоговых окон Используя коллекцию Dialogs, представляющую совокупность диалоговых окон, встроенных в Word, можно позволить пользователю самому выбрать нужный файл. Метод Show отображает это диалоговое окно и позволяет открыть файл. Display – только показывает окно. Sub test() dlgAnswer = Dialogs(wdDialogFileOpen).Show End Sub Sub test2() dlgAnswer = Dialogs(wdDialogFileOpen).Display End Sub
18 Закрытие документа Как и при обычной работе, закрыть можно с сохранением Documents("Sales.doc").Close SaveChanges := wdSaveChanges … или без сохранения документа Documents("Sales.doc").Close SaveChanges := wdDoNotSaveChanges
19 Печать документа Распечатка документа осуществляется методом PrintOut объекта Document. ActiveDocument.PrintOut разрешаем печать скрытого текста и печатаем первые три страницы активного документа: Options.PrintHiddenText = True ActiveDocument.PrintOut Range:=wdPrintFromTo, From:="1", To:="3"
20 Переменные документа Variables (Variable) - с документом можно связать коллекцию переменных типа Variant. Время жизни таких переменных совпадает с временем жизни документа, поэтому в них можно постоянно хранить и накапливать информацию о ходе работы с документом. Например, в такой коллекции можно хранить информацию о датах открытия документа и продолжительности работы с ним: Sub Document_Open() Dim n As Integer n = ActiveDocument.Variables.Count ActiveDocument.Variables.Add Name :="Open_"+CStr(n+1), Value:=Now() MsgBox ("Документ открыт в " & CStr(n+1)& "-й раз") End Sub
Пример использования переменных Dim Свойство As Variable Dim текст As String текст = "" For Each Свойство In ActiveDocument.Variables текст = текст & Свойство.Name & " = " & _ Свойство.Value & vbCr Next StatBox.Value = текст 21
22 Подсчет статистики документа MsgBox "В документе " & _ ActiveDocument.ComputeStatistics(Statistic:=wdStatisticWords) & " слов"
Работа с объектами документа Обычно основная часть работы приходится на манипуляции с текстовым содержимым документа Все составные части документа отражены в объектной модели 23
24 Объектная модель документа Word
25 Общие принципы доступа к объектам документа Основа документа–текст Текст имеет свою структуру, что позволяет в различных ситуациях оперировать различными его фрагментами Минимальная единица текста – символ. Более крупные единицы текста – слова, предложения, абзацы, страницы, разделы Для всех этих единиц текста существуют объекты Word.
26 Общие принципы доступа к объектам документа Characters, Words, Sentences – доступ осуществляется через объект Range Paragraphs, Sections, Subdocuments – осуществляется непосредственный доступ
Объекты Sections 27
Sections: пример 28 Для обращения к «внутренней части» приходится использовать объект Range
Объекты Paragraphs 29
Paragraphs: пример 30
Низкоуровневые объекты
Объекты Sentences: пример 32
Замечание: неоднозначность Объектная модель MS Word (и других приложений MS Office) характеризуется неоднозначностью и не совсем четкой структурированностью В приведенном примере приведено два способа доступа к одному и тому же предложению С другой стороны, это дает дополнительную гибкость в работе 33
Часто используемые объекты Таблицы Вкладки Рисунки и внедренные объекты 34
35 Таблицы Tables(Table) – "Обычные" таблицы с произвольным количеством строк и столбцов. Остальные классы TableХХХХХ задают таблицы специального вида: например, TablesOfContent – оглавление (дословно: таблица оглавления).
36 Работа с таблицами Set Tabl = ActiveDocument.Tables(1) Tabl.Rows(2).Delete Удаление второй строки из первой таблицы активного документа
Работа с таблицами: пример 37
38 Внедренные объекты Shapes(Shape), InlineShapes(InlineShape) - эти коллекции позволяют добавлять в документ рисунки, ActiveX и OLE-объекты. Элементы этих коллекций отличаются способом привязки к документу – первые могут свободно перемещаться, а вторые жестко привязаны к заданной области документа.
Объекты InlineShapes 39
Пример обращения 40
Пример обращения 41
Объект Shapes 42 Shapes – «плавающие» объекты, это их основное отличие от InlineShapes
43 Списки Lists(List) - классы всех списков документа (нумерованных и маркированных) ListParagraphs (ListParagraph) - списки абзацев всех списков документа ListTemplates (ListTemplate) - шаблоны оформления списков.
44 Работа со списками Замена всех нумерованных списков документа маркированными: Sub ЗаменаСписков() Dim Список As List For Each Список In ActiveDocument.Lists If Список.Range.ListFormat.ListType = _ wdListSimpleNumbering Then _ Список.Range.ListFormat.ApplyBulletDefault Next Список End Sub
Результат работы 45
46 Закладки Bookmark (Bookmarks). Удобны для работы с полями форм и другими активными элементами документа Word.
47 Обработка введенных значений Public Sub Проверка() If ActiveDocument.FormFields("В1В1").Result = True _ And ActiveDocument.FormFields("В1В2").Result = False _ And ActiveDocument.FormFields("В1В3").Result = False _ And ActiveDocument.FormFields("В1В4").Result = False _ Then MsgBox («Ответ верный") Else MsgBox («Учите географию") End If End Sub
48 Комментарии Добавление комментариев с названием формы Sub AddComments() Dim Bkm As Bookmark, Cmm As Comment For Each Bkm In ActiveDocument.Bookmarks ActiveDocument.Comments.Add _ Range:=Bkm.Range, Text:=Bkm.Name Next Bkm End Sub
Элементы управления Два «старых» типа: элементы формы ActiveX-элементы Office 2007 дополнительно: элементы управления содержимым 49
Элементы форм Позволяют создавать электронные документы-формы Работают в защищенных документах 50
Защита документа 51
Программная обработка If ThisDocument.FormFields("Q1V1").Result = True _ And ThisDocument.FormFields("Q1V2").Result = False _ And ThisDocument.FormFields("Q1V3").Result = False _ And ThisDocument.FormFields("Q1V4").Result = True Then Сумма = Сумма + 1 End If 52
ActiveX-элементы Гораздо больший набор Работают в режиме незащищенного документа Обладают большим набором свойств, собственным именем, набором событий и т.д. 53
Программная обработка If ThisDocument.Q2V2.Value = True Then Сумма = Сумма + 1 End If 54
Элементы управления содержимым Интерактивные элементы Зачастую работа с ними не требует создания программного кода 55
Дата и рисунок 56
Программная обработка Private Sub StatToggle_Click() For Each Свойство In ActiveDocument.Variables текст = текст & Свойство.Name & " = " & Свойство.Value & vbCr Next If StatToggle.Value = True Then ActiveDocument.ContentControls(1).Range.Text = текст Else ActiveDocument.ContentControls(1).Range.Text = "" End If End Sub 57
58 Работа с текстом Selection – выделенная область Range – указанный диапазон Range.Select Selection.Range
59 Перемещение диапазона и выделения Перемещение: Selection.Move Selection.MoveRight Unit:=wdWord, Count := 3 myRange.Move Unit:=wdParagraph Count:=3 Выделение: Selection.MoveRight Unit:=wdWord, Count := 3, _ Extend:= wdExtend
Пример 60
61 Удаление, копирование, вставка текста Копировать выделенный текст, вставить в новый документ Selection.Copy Documents.Add.Content.Paste Удаление первого абзаца ActiveDocument.Paragraphs(1).Delete
62 Форматирование абзацев Свойство Font обеспечивает доступ к свойствам и методам, связанным форматированием символов, а свойство ParagraphFormat – к тем, что связаны с форматированием абзацев: With ActiveDocument.Paragraphs(2).Range.Font .Name = "Times New Roman" .Size = 14 .AllCaps = True End With With ActiveDocument.Paragraphs(1).Range.ParagraphFormat .SpaceAfter = 6 .SpaceBefore = 6 End With
63 Перебор абзацев в диапазоне перебор первых пяти абзацев активного документа с добавлением текста "Вопрос:" перед каждым из них Sub Вопрос() Set мойДокумент = ActiveDocument Set мойДиапазон = _ мойДокумент.Range(Start:=мойДокумент.Paragraphs(1).Range.Start, _ End:=мойДокумент.Paragraphs(5).Range.End) For Each Paragraph In мойДиапазон.Paragraphs Paragraph.Range.InsertBefore "Вопрос: " & vbTab Next Paragraph End Sub
64 Работа с таблицами ActiveDocument.Tables(1).Cell(Row:=1, Column:=1) ActiveDocument.Tables(1).Columns(1).Cells(1) ActiveDocument.Tables.Cell(1, 1)
65 Работа со сложной таблицей Sub Перебор() Dim столбец As Integer столбец = 0 Set табличка = ActiveDocument.Tables(1) For Each колонка In табличка.Columns столбец = столбец + 1 MsgBox (столбец) Next End Sub
66 Работа со сложной таблицей Sub Таблица2() ActiveDocument.Tables(1).Cell(2, 2).Range.Text = "Привет" End Sub
67 Работа со сложной таблицей Sub Таблица2() ActiveDocument.Tables(1).Cell(1, 1).Range.Text = "Привет" End Sub
Программная работа с текстом Возможно создание документа целиком средствами VBA. Недостаток подхода: приходится постоянно следить за нумерацией абзацев, предложений, элементов списка … Обычно проще сочетать постоянные части документа (создаются «вручную») с управляемыми программно вставками 68
Методы структурирования документа Разметка документа с помощью таблиц Использование полей Применение закладок 69
70 Принципы применения таблиц Документ разбивается на части Отдельные части помещаются в ячейки таблицы Работа идет с ячейками
71 Пример: письмо Рекомендуется документ разделить на три части
Создание первой части Private Sub СоздатьОбращение() ТекстОбращения = "Уважаемый, Иванов И.И.!" ActiveDocument.Tables(1).Cell(1, 1).Range.Text _ = ТекстОбращения End Sub 72
Создание второй части Private Sub СоздатьСообщение() ТекстСообщения = "Наша фирма предлагает путевки на " & _ "отдых в лучших горных курортах Европы: Австрия, Чехия" ActiveDocument.Tables(1).Cell(2, 1).Range.Text = _ ТекстСообщения End Sub 73
Создание третьей части Private Sub СоздатьПодпись() ТекстПодписи = "Директор Иванов И.И." ActiveDocument.Tables(1).Cell(3, 1).Range.Text = _ ТекстПодписи End Sub 74
Завершение работы: создание формы 75
76 Применение таблиц Пример
Применение полей Оправдано когда имеется большое количество вставок небольшого размера (особенно повторяющихся) Пример: типовой договор, справка, служебная записка 77
Принципы использования Вместо изменяемого текста (фамилия, должность, паспортные данные) вставляются поля Полям присваиваются имена (для удобства) Поля заполняются средствами VBA (часто с помощью формы) 78
Вставка и заполнение поля 79 ActiveDocument .FormFields("Фамилия").Result = "Балаганов"
Окончательное оформление 80 Private Sub КнопкаЗаполнить_Click() ActiveDocument.FormFields("Фамилия").Result = ПолеФамилия.Text ActiveDocument.FormFields("Фамилия2").Result = ПолеФамилия.Text … … … ActiveDocument.FormFields("Паспорт").Result = ПолеПаспорт.Text End Sub
Форма 81 5 текстовых полей и одна кнопка
Код кнопки Private Sub КнопкаЗаполнить_Click() With ActiveDocument .FormFields("Фамилия").Result = ПолеФамилия.Text .FormFields("Фамилия2").Result = ПолеФамилия.Text .FormFields("Имя").Result = ПолеИмя.Text .FormFields("Имя2").Result = ПолеИмя.Text .FormFields("Отчество").Result = ПолеОтчество.Text .FormFields("Отчество2").Result = ПолеОтчество.Text .FormFields("Оплата").Result = ПолеОплата.Text .FormFields("Паспорт").Result = ПолеПаспорт.Text End With End Sub 82
Использование закладок Рекомендуется для документов, не предназначенных для повторного переоформления, т.к. по умолчанию закладки заменяются на текст. 83
Способ применения Выделить замещаемый текст и создать закладки (Вставка / Закладка) Заменить закладки на текстовые данные 84
Пример Sub Закладки() ActiveDocument.Bookmarks("наименование").Range.Text = _ "Горшок керамический ГК 310" ActiveDocument.Bookmarks("дата").Range.Text = _ "01.04.2008" End Sub 85
Поиск и замена текста Достаточно распространенная задача при работе с большими документами Программирование используется в основном для «пакетных» задач (большое количество однотипных операций по поиску и замене) 86
87 Поиск текста Небходимо: 1) указать параметры поиска 2) выполнить поиск (execute) With Selection.Find .Forward = True .Wrap = wdFindStop Text = "Привет" .Execute End With
88 Прямой подсчет Sub КоличествоСлов() Dim Слово As String Dim i As Integer Dim ВременноеСлово As Range i = 0 Слово = "код" For Each ВременноеСлово In ActiveDocument.Words If UCase(Trim(ВременноеСлово)) = UCase(Слово) Then i = i + 1 End If Next MsgBox i End Sub
89 Подсчет количества слов Sub Поиск() Dim найдено As Integer ActiveDocument.Select With Selection.Find .ClearFormatting .Forward = True .Wrap = wdFindStop .Text = "код" While .Execute найдено = найдено + 1 Wend End With MsgBox (найдено) End Sub
90 Поиск и замена текста Объект Replacement представляет критерии замены для операции поиска и замены. With Selection.Find .ClearFormatting .Text = "г-н" .Replacement.ClearFormatting .Replacement.Text = "господин" .Execute Replace:= wdReplaceAII, _ Forward:=True, Wrap:=wdFindContinue End With
Пример: замена двух и более пробелов на один With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = " {2;}" .Replacement.Text = " " .Forward = True .Wrap = wdFindContinue .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Collapse direction:=wdCollapseStart End Sub 91
92 События документа Основные события документа: Close Возникает при закрытии документа New Возникает при создании документа на базе шаблона Open Возникает при открытии документа Sub Document_Open() Application.WindowState = wdWindowStateMaximize End Sub
93 Открытие документа Процедуры хранятся в модуле документа Sub Document_Open() MsgBox "Программа выполнила допустимю операцию и будет открыта" Application.WindowState = wdWindowStateMaximize End Sub Пример
94 Специальные имена макросов AutoExec При каждом запуске Word или загрузке глобального шаблона. AutoNew При каждом создании нового документа. AutoOpen При каждом открытии существующего документа. AutoClose При каждом закрытии документа. AutoExit При каждом закрытии Word или выгрузке глобального шаблона. В следующем примере при открытии документа окно Word разворачивали до максимального размера.
95 Заключение Все элементы Word (документы, таблицы, абзацы, закладки, поля и т.п.) в Visual Basic можно представить объектами. Методы и свойства этих объектов позволяют автоматизировать операции в Word. Предпочтительно использовать VBA для операций форматирования больших документов нестандартного поиска и замены обработки событий документа автоматической обработки форм
564-rabota_s_dokumentami_ms_word.pptx
- Количество слайдов: 95