Vba в word примеры. VBA в приложении к Excel, Word и Power Point

Форматирование документа

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

Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, таблица, ячейка таблицы, комментарий и т. д. определяют диапазоны. Например, для того чтобы вставить некоторый текст в уже существующий документ, необходимо прописать код:

ActiveDocument.Paragraphs(1).Range.Text = «Oxo-xo!!»

Причем данная строка будет расположена в конце существующего параграфа. С другой стороны, используя объект Selection, можно также вставить некоторый текст в документ, используя метод Add и присвоение свойства Text объекту Selection:


Selection.Text = "Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, « + TextBox1.Text +», и отвечает запросам всех программистов!»

В результате выполнения данного программного кода в документе Word будет выведена строка: “Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, Светлана, и отвечает запросам всех программистов!”.

Описание процедур

Private Sub CommandButton1_Click()
If Documents.Count = 0 Then Documents.Add
Selection.Text = "При прохождении тока напряжением в " + TextBox1.Text + "вольт попроводнику длиной " + TextBox4.Text + " метров, сечением " + TextBox3.Text + "кв. мм и удельным сопротивлением " + TextBox5.Text + " Ом*мм^2/м за " + TextBox2.Text + " секунд выделится " + TextBox6.Text + « джоулей теплоты»
Selection.Collapse direction:=wdCollapseEnd
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub TextBox1_Change()
scet
End Sub

Private Sub TextBox2_Change()
scet
End Sub

Private Sub TextBox3_Change()
scet
End Sub

Private Sub TextBox4_Change()
scet
End Sub

Private Sub TextBox5_Change()
scet
End Sub

Private Sub scet()
If IsNumeric(TextBox1.Text) = True And
IsNumeric(TextBox2.Text) = True And
IsNumeric(TextBox3.Text) = True And
IsNumeric(TextBox4.Text) = True And
IsNumeric(TextBox5.Text) = True And Not Val(TextBox4.Text) = 0 And Not Val(TextBox5.Text) = 0 Then rez = ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) * Val(TextBox3.Text)) / (Val(TextBox4.Text) * Val(TextBox5.Text))
TextBox6.Text = Str$(rez)
CommandButton1.Enabled = True
Else
TextBox6.Text = ""
CommandButton1.Enabled = False
End If
End Sub

При работе с текстом на рабочем листе Word необходимо знать следующие коды:

определение цвета
Selection.Font.Color =
wdColorRed – красный
wdColorDarkRed – бордовый
wdColorDarkTeal – бирюзовый
wdColorBlue – синий
wdColorGreen – зеленый
wdColorBlack – черный
wdColorOrange – оранжевый

определение жирности
Selection.Font.Bold =
wdToggle – жирность

определение начертания
Selection.Font.Italic=
wdToggle – курсив

определение выравнивания
Selection.ParagraphFormat.Alignment=
wdAlignParagraphRight – выравнивание по правому краю
wdAlignParagraphCenter – выравнивание по центру
wdAlignParagraphJustify – выравнивание по левому краю

вставка в текст конкретного предложения
Selection.TypeText Text:="Пример работы с текстом"
вставка новой пустой строки
Selection.TypeParagraph
установка размера букв
Selection.Font.Size = 14

Одним из элементов оформления диалоговых окон является элемент управления Image (рисунок). Его основные свойства:

Autosize – изменяет размер рисунка на форме (автоматически или нет);

Picture – отображает графический файл, выводимый на форму;

pictureSizeMode – устанавливает масштабирование рисунка (не весь рисунок, вся поверхность объекта, целиком внутри объекта);

PictureAligment – устанавливает расположение рисунка внутри объекта (слева, справа, вверху, внизу);
pictureTilling – покрывает объект мозаикой из рисунка.

Данные свойства либо устанавливаются в окне свойств объекта, либо прописываются в листинге.

Примечание . При работе данного приложения все значения полей ввода должны быть числовыми. В VBA есть специальная функция для проверки того, является или нет введенная строка записью числа – IsNumeric. Для проверки отличия от нуля значений в последних двух полях ввода используется функция Val, которая переводит строковое выражение в числовое, если это строковое выражение содержит в своем начале цифры (или все состоит из них).

Функция Str делает преобразование, обратное тому, что производит Val, – конвертирует числовое значение выражения в строковое, что позволяет этому значению в дальнейшем обрабатываться как строке.

Таким образом, функции Val и Str преобразуют типы данных обрабатываемых ими переменных, соответственно, из строкового в числовой и из числового в строковый.

Создание кнопки или панели в Word

Назначить форме кнопку или пункт меню для непосредственного вызова приложения из Word нельзя – это можно сделать только для модулей. Поэтому нужно применить следующий способ. Создайте макрос (Меню + Insert + Module) в открытом проекте:

Sub counter()

userForm1. Show

End Sub

Переименуйте этот макрос по своему усмотрению, например Teplo. И выполните следующие действия:

1. Щелкните правой кнопкой мыши в любом месте панели инструментов.

2. В этом меню выберите команду Настройка (или Сервис + Настройка).

3. В диалоговом окне Настройка щелкните на ярлыке вкладки Команды .

4. Прокрутите список Категории вниз и найдите пункт Макросы . Выберите этот пункт. В списке «Сохранить в» выберите имя вашего документа, в котором создан макрос.

5. В правом окне найдите необходимый макрос (либо VBA-программу).

6. Перетащите имя этого макроса или программы на панель инструментов.

7. Создайте соответствующую надпись кнопки и, если нужно, рисунок (при помощи правой кнопки мыши).

8. Закройте диалоговое окно Настройка, чтобы завершить работу.

9. В результате будет создана кнопка запуска приложения.


Лабораторная работа №5


Похожая информация.


Программирование на VBA в Word

Вывод текста в документ Word

5.1. Основные объекты Word

Объект Word.Application

Дополнительно ко всем возможностям программирования на VBA, рассмотренным в части I, можно добавить возможности вывода всех результатов вычислений, преобразований, сообщений в документ Word, с возможностью дальнейшего отправления на печать. Для этого необходимо рассмотреть основные объекты приложения Word.

Ключевым в объектной модели Word является объект Application, так как он содержит все остальные объекты Word. Его элементами на разных уровнях иерархии являются около 180 объектов. Сам корневой объект Application имеет более сотни элементов: свойств, методов и событий.

Свойства объекта Word.Application

Свойства любого объекта делятся на две группы: свойства-участники (объекты) и терминальные свойства (обычные переменные VBA).

Единую систему организации панелей меню и инструментальных кнопок обеспечивает объект CommandBars, справок – Assistant, поиска – FileSearch.

Центральными объектами Word являются коллекции Documents и Templates, точнее составляющие их элементы, сам документ и шаблоны.

Рассмотрим объекты второго плана.

Объект AutoCorrect поддерживает работу по автоматической коррекции набираемых текстов. Его возможности эквивалентны команде Автозамена меню Сервис .

Объект Browser позволяет перемещать точку вставки, указывающую на объекты в документе.

Коллекция объектов Dialogs представляет совокупность диалоговых окон, встроенных в Word. Добавлять новые или удалять элементы этой коллекции программным путем нельзя. Но соответствующие окна можно открыть и показать на экране дисплея и тем самым организовать диалог пользователем по теме, заданной соответствующим окном.

Три объекта, связанные с проверкой грамматики и орфографии: Languages, Dictionaries, SpellingSuggestions , – позволяют установить нужный язык, выбрать словарь, в том числе пользовательские словари, а также работать со списком слов, предлагаемых для исправления при обнаружении ошибки правописания. Команды Правописание и Язык меню Сервис предоставляют аналогичные, функциональные возможности при работе с документом вручную.

С помощью объекта Options можно программным путем установить различные опции приложения и документа аналогично тому, как если бы вы выбрали команду Параметры в меню Сервис.

Работа с документами и класс Document

Когда открывается приложение, создается коллекция документов Documents, содержащая все открытые документы. В начальный момент коллекция содержит минимум один новый или ранее существовавший документ. Новый документ добавляется методом Add, а уже существующий – методом Open объекта Documents. Чтобы добраться до нужного документа, достаточно указать его индекс – имя файла, хранящего документ, или его порядковый номер в коллекции. Для той же цели можно использовать и метод Item, но обычно он опускается. Метод Save позволяет сохранить документ, а метод Close, сохраняя документ в файле, закрывает его и удаляет из коллекции.

Глобальное свойство Dialogs возвращает коллекцию диалоговых окон. Константа wdDialogFileOpen задает конкретное диалоговое окно – объект класса Dialog.

Классы, задающие структуризацию текста документа

Текст – это основа большинства документов. Его можно структурировать, оперируя различными единицами при решении тех или иных задач преобразования. Минимальной единицей текста обычно является символ. Кроме этого, существуют следующие единицы: слова, предложения, абзацы, а также более крупные образования: страницы, параграфы, главы.

Классы Characters, Words, Statements, Paragraphs, Sections позволяют работать с последовательностями (коллекциями) символов, слов, предложений, абзацев и разделов. Самой крупной единицей после абзаца выступает раздел. Элементом коллекций Characters, Words и Statements является объект класса Range. Объект Range позволяет работать как с одним элементом, так и с произвольной последовательностью элементов. Документы, поддокументы, абзацы, разделы – все они имеют метод или свойство Range, возвращающее интервал, связанный с объектом. Поэтому работа с текстом так или иначе ведется через методы и свойства объекта Range.

События объекта Document

Объект Document может реагировать на три события, возникающие в результате действий пользователя.

Таблица 16

События объекта Document Документ и его части

Рассмотрим основные классы, определяющие структуру документа.

1. Subdocuments (Subdocument) – коллекция и сам поддокумент. Есть некоторый разумный предел размера одного документа. Если в документе больше 10–20 страниц, работать с ним становится неудобно. В этом случае в нем выделяют главный документ и поддокументы. Главный документ в этом случае имеет коллекцию поддокументов, каждый из них является, по сути, документом, с которым можно работать независимо.

Метод AddFromRange класса SubDocuments создает поддокумент, выделяя из главного документа область, заданную параметром Range.

2. Tables (Table), TablesOfAuthoritiesCategories (T.O.A.C), TablesOfAuthorities (TableOfAuthorities), TablesOfContents (TablesOfContent), TablesOfFigures (TablesOfFigure). Класс Table определяет «обычные» таблицы с произвольным количеством строк и столбцов и произвольным заполнением полей. Остальные классы задают таблицы специального вида.

3. Shapes(Shape), InlineShapes(InlineShape) – эти две коллекции с их элементами позволяют добавлять в документ рисунки, но не только их. ActiveX– и OLE-объекты также являются элементами этих коллекций. Элементы этих двух коллекций отличаются тем, как они привязаны к документу: первые могут свободно перемещаться, вторые жестко привязаны к заданной области документа.

4. Lists(List), ListParagraphs(ListParagraph), listTemplates (ListTemplate) – списки удобно вводить в документ, когда имеешь дело с перечислением. Списки можно оформлять в соответствии с шаблоном. Существуют две группы шаблонов: нумерованные списки и списки-бюллетени. Коллекция ListTemplates содержит шаблоны оформления списков, а класс ListTemplate описывает конкретный шаблон. Шаблон применяется к списку абзацев и придает ему структуру, заданную шаблоном. Коллекция Lists содержит те списки документа (списки абзацев), что оформлены как нумерованные списки или списки-бюллетени. Коллекция ListParagraphs представляет список абзацев всех списков документа. Свойством ListParagraphs, которое возвращает объект соответствующего класса, обладает не только документ, но и объекты List и Range. Так что при наличии списка – объекта List можно выделить список абзацев. Чаще приходится выполнять обратную операцию – применять к списку абзацев один из возможных шаблонов, придав ему «настоящую» структуру списка. Тогда используют объект ListFormat.

5. Comments(Comment), Bookmarks(Bookmark), FootNotes (FootNote), EndNotes(EndNote), Fields(Field) – эти коллекции и их элементы отражают независимые, но близкие по духу понятия. Это части документа, косвенно связанные с ним. При нормальном просмотре документа они могут быть и не видны.

Коллекция comments и класс comment задают комментарии. Комментарии, как известно, вводятся для пояснения тех или иных терминов или понятий документа. Формально они приписываются некоторой области – объекту range.

Большой документ, к отдельным частям которого приходится часто обращаться, стоит снабдить закладками. Коллекция bookmarks задает все закладки данного документа.

Еще один способ комментирования – сноски. Они могут быть двух видов: подстраничные (внизу страницы) и концевые (в конце документа). Первые собраны в коллекцию footnotes, вторые – endnotes.

6. Fields (Field) – эта коллекция позволяет работать с полями документа. Одна из особенностей полей состоит в том, что их значения обновляются автоматически в зависимости от изменившихся внешних условий или контекста.

7. Story Ranges (Range) – эта коллекция представляет совокупность частей документа, называемых фрагментами (Story). Количество различных фрагментов документа фиксировано. Нельзя добавлять элементы в эту коллекцию обычным способом, используя метод Add. Фрагменты появляются в коллекции, когда создается соответствующая часть документа.

Фрагменты имеют тип, задаваемый константами из перечисления wdStoryType. Главный фрагмент – текст документа, тип которого задается константой wdMainTextStory. Комментарии, ссылки, колонтитулы составляют фрагменты других типов, т. е. сам фрагмент является объектом Range. Так что благодаря фрагментам можно, например, работать с коллекцией комментариев как с единой областью.

8. Variables (Variable) – с документом можно связать коллекцию переменных типа Variant. Это важная для программистов коллекция, так как время жизни переменных, в нее входящих, совпадает со временем жизни документа. Тем самым появляется возможность сохранять информацию о работе той или иной процедуры между сеансами. Например, можно иметь счетчики, подсчитывающие число вызовов макроса, и в зависимости от этого по-разному определять его дальнейшую работу.

Объекты Range и Selection

Объект Document имеет метод Range, возвращающий объект Range, и метод Select, создающий объект Selection. Метод Range – это функция, возвращающая как результат объект Range; метод Select – это процедура без параметров, которая создает объект Selection в качестве побочного эффекта. Объект Range имеет метод Select, превращающий область объекта Range в выделенную. Тем самым метод Select определяет новый объект Selection. Симметрично, объект Selection имеет свойство Range, возвращающее объект Range, соответствующий выделенной области.

Большинство ранее описанных частей документа являются и частями (свойствами) объектов Range и Selection.

Объект Range напоминает матрешку: в каждую область вложена область поменьше. Вот пример корректного (хоть и не самого эффективного) задания объекта Range:

ActiveDocument.Range.Sections(1).Range.Paragraphs(l).Range.Sentences(1). Words(1).Characters(1)

Работа с текстом

Объекты Range и Selection позволяют выполнять основные операции над текстом: «выделить», «добавить», «заменить», «удалить». У наших объектов большой набор методов, позволяющих реализовать эти операции. Все рассматриваемые здесь методы принадлежат обоим объектам, если не сделана специальная оговорка.

Выделение

Выделить некоторую часть текста по существу означает определить объект Range или Selection. Объекты задают некоторую область в тексте документа, а их свойства Start и End позволяют установить начало и конец этой области. Меняя значения свойства, можно задать нужную область выделения.

Move является основным методом перемещения точки вставки. Остальные методы этой группы – в той или иной степени его модификации. Метод Move(Unit, Count) сжимает область в точку, стягивая ее в начало или конец, а затем перемещает точку вставки. Параметр Unit определяет единицы перемещения, a Count – количество этих единиц (по умолчанию 1). Знак переменной Count задает направление стягивания и перемещения. Положительные значения этого параметра задают стягивание к концу и перемещение вперед, отрицательные – стягивание в начало и перемещение назад. Чистое стягивание без перемещения точки вставки задается как перемещение на одну единицу. Метод возвращает количество единиц, на которое фактически произошло перемещение, или 0, если оно не осуществлено. Параметр Unit принимает значения wdCharacter (по умолчанию), wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow и wdTable.

Методы перемещения на сам текст не влияют – лишь изменяют область, заданную объектами Range и Selection. Поэтому эти методы применимы только к переменным типа Range, но не к фиксированным областям. Например, запись

ActiveDocument.Paragraphs(l).Range.Move

не имеет эффекта, поскольку область первого абзаца – вещь неизменяемая. Метод Move стягивает область в точку, которая и перемещается, поэтому после его выполнения область исчезает, остается только точка вставки. Методы MoveStart и MoveEnd перемещают начальную или конечную точку области, обычно тем самым расширяя область.

Удаление текста

Метод Delete позволяет удалить текст. Вызванный без параметров, он удаляет вызывающий его объект Range или Selection. Если он применен в форме Delete(Unit,Count) , удаляется часть текста в указанной области. Параметр Unit задает единицы, но при удалении возможны только два значения: wdWord и wdCharacter. Параметр Count задает количество удаляемых единиц. Если область стянута в точку, удаляются символы перед точкой вставки или после нее в зависимости от знака параметра Count.

Вставка текста

Группа методов Insert объектов Range и Selection позволяет осуществлять вставки в документ. Для вставки текста используются методы InsertBefore(Text) и InsertAfter(Text). Параметр text типа string задает текст, вставляемый до или после области, заданной объектами range или selection. После вставки текста область автоматически расширяется, включая в себя добавляемый текст.

Свойство Text позволяет заменять текст в выделенной области, поэтому нет нужды вызывать метод Insert(Text). Методы InsertBefore и InsertAfter безопасны, так как текст добавляется, не изменяя содержимого области. Совсем иное дело – методы вставки, которые далеко не безопасны. При вставке внутрь области, например при использовании метода InsertSymbol или InsertParagraph, заменяется содержимое области.

Работа с буфером

Метод Сору, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод cut, действуя аналогично, должен бы заодно и удалять объект. Но сам объект не удаляется – только стягивается в точку, так что над ним возможны дальнейшие операции.

Иногда в буфер копируют не текст, а его формат. Этим занимается метод CopyFormat, копирующий формат по первому символу объекта selection. Если этот символ – метка абзаца, копируется формат абзаца. Методом CopyFormat обладает только объект selection.

Метод Paste позволяет поместить («приклеить») содержимое буфера в область, заданную объектами Range и Selection. Эта операция опасна, так как происходит замена, а не добавление текста. Поэтому обычно метод Paste применяется к объектам Range и Selection, предварительно стянутым в точку вставки. Метод PasteFormat применяет форматирование, хранящееся в буфере, к объекту Selection.

Например, создадим макрос, который вставляет список «урок, экзамен, сдал!», копирует его и помещает еще раз на лист.

Sub Макрос1()

With Selection.ParagraphFormat

Selection.TypeText Text:="Работа с текстом:"

Selection.TypeParagraph

ListGalleries(wdBulletGallery).ListTemplates(1)._ListLevels(1)

ListGalleries(wdBulletGallery).ListTemplates(1).Name = ""

Selection.Range.ListFormat.ApplyListTemplate

ListTemplate:=ListGalleries(wdBulletGallery).ListTemplates(1), ContinuePreviousList:=False, ApplyTo:= _wdListApplyToWholeList, DefaultListBehavior:=wdWord10ListBehavior

Selection.TypeText Text:="урок"

Selection.TypeParagraph

Selection.TypeText Text:="экзамен"

Selection.TypeParagraph

Selection.TypeText Text:="сдал"

Selection.TypeParagraph

Selection.Range.ListFormat.RemoveNumbers

NumberType:=wdNumberParagraph

Selection.TypeParagraph

Selection.Font.Bold = wdToggle

Selection.Font.Italic = wdToggle

Selection.TypeText Text:="Работа завершена!"

Selection.WholeStory

Selection.PasteAndFormat (wdPasteDefault)

5.2. Форматирование документа

Работа с текстом (продолжение)

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

Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, таблица, ячейка таблицы, комментарий и т. д. определяют диапазоны. Например, для того чтобы вставить некоторый текст в уже существующий документ, необходимо прописать код:

ActiveDocument.Paragraphs(1).Range.Text = «Oxo-xo!!»

Причем данная строка будет расположена в конце существующего параграфа. С другой стороны, используя объект Selection, можно также вставить некоторый текст в документ, используя метод Add и присвоение свойства Text объекту Selection:

Selection.Text = "Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, « + TextBox1.Text +», и отвечает запросам всех программистов!»

В результате выполнения данного программного кода в документе Word будет выведена строка:

Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, Светлана, и отвечает запросам всех программистов!

Здесь имя Светлана, например, считано с текстового поля некоторой формы, имеющей всего одно поле ввода для имени и кнопку «Вывод текста» (рис. 64).

Рис. 64. Форма ввода данных

При работе с текстом на рабочем листе Word необходимо знать следующие коды:

определение цвета

Selection.Font.Color =

wdColorRed – красный

wdColorDarkRed – бордовый

wdColorDarkTeal – бирюзовый

wdColorBlue – синий

wdColorGreen – зеленый

wdColorBlack – черный

wdColorOrange – оранжевый

определение жирности

Selection.Font.Bold =

wdToggle – жирность

определение начертания

Selection.Font.Italic=

wdToggle – курсив

определение выравнивания

Selection.ParagraphFormat.Alignment=

wdAlignParagraphRight – выравнивание по правому краю

wdAlignParagraphCenter – выравнивание по центру

wdAlignParagraphJustify – выравнивание по левому краю

вставка в текст конкретного предложения

Selection.TypeText Text:="Пример работы с текстом"

вставка новой пустой строки

Selection.TypeParagraph

установка размера букв

Selection.Font.Size = 14

Примечание. Для правильного оформления кода пользуйтесь возможностями создания макроса написания программы.

Одним из элементов оформления диалоговых окон является элемент управления Image (рисунок). Его основные свойства:

Autosize – изменяет размер рисунка на форме (автоматически или нет);

Picture – отображает графический файл, выводимый на форму;

pictureSizeMode – устанавливает масштабирование рисунка (не весь рисунок, вся поверхность объекта, целиком внутри объекта);

PictureAligment – устанавливает расположение рисунка внутри объекта (слева, справа, вверху, внизу);

pictureTilling – покрывает объект мозаикой из рисунка.

Данные свойства либо устанавливаются в окне свойств объекта, либо прописываются в листинге.

Пример 30. Создать программу, которая будет производить подсчет количества теплоты, выделяемой в проводнике при протекании в нем тока. Формула для расчета количества теплоты известна под именем закона Джоуля – Ленца:

где Q – количество теплоты в Джоулях;

U – напряжение в вольтах;

t – время в секундах;

S – площадь поперечного сечения проводника в квадратных миллиметрах;

l – длина проводника в метрах;

р – удельное сопротивление материала проводника в Ом? мм 2 /м.

Все исходные данные вводятся в текстовые поля формы. По итогам вычисления результат в виде объяснительной записки выводится в документ, а численный результат – в специальное окно формы.

Технология выполнения

Создайте форму по приведенному рис. 65.

Рис. 65. Разработанная форма примера 30 в рабочем состоянии и вывод результирующих сведений в документ word

При создании формы установите необходимые свойства элементов. Установите свойство Locked элемента TextBox6 как True, чтобы не допустить случайного ввода пользователем в него текста.

Описание процедур

Private Sub CommandButton1_Click()

If Documents.Count = 0 Then Documents.Add

Selection.Text = "При прохождении тока напряжением в " + TextBox1.Text + "вольт по проводнику длиной " + TextBox4.Text + " метров, сечением " + TextBox3.Text + "кв. мм и удельным сопротивлением " + TextBox5.Text + " Ом*мм2/м за " + TextBox2.Text + " секунд выделится " + TextBox6.Text + « джоулей теплоты»

Selection.Collapse direction:=wdCollapseEnd

Private Sub CommandButton2_Click()

Private Sub TextBox1_Change()

Private Sub TextBox2_Change()

Private Sub TextBox3_Change()

Private Sub TextBox4_Change()

Private Sub TextBox5_Change()

Private Sub scet()

If IsNumeric(TextBox1.Text) = True And

IsNumeric(TextBox2.Text) = True And

IsNumeric(TextBox3.Text) = True And

IsNumeric(TextBox4.Text) = True And

IsNumeric(TextBox5.Text) = True And Not Val(TextBox4.Text)

0 And Not Val(TextBox5.Text) = 0 Then

rez = ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) *

Val(TextBox3.Text)) / (Val(TextBox4.Text) *

Val(TextBox5.Text))

TextBox6.Text = Str$(rez)

CommandButton1.Enabled = True

TextBox6.Text = ""

CommandButton1.Enabled = False

Примечание. При работе данного приложения все значения полей ввода должны быть числовыми. В VBA есть специальная функция для проверки того, является или нет введенная строка записью числа – IsNumeric. Для проверки отличия от нуля значений в последних двух полях ввода используется функция Val, которая переводит строковое выражение в числовое, если это строковое выражение содержит в своем начале цифры (или все состоит из них).

Функция Str делает преобразование, обратное тому, что производит Val, – конвертирует числовое значение выражения в строковое, что позволяет этому значению в дальнейшем обрабатываться как строке.

Таким образом, функции Val и Str преобразуют типы данных обрабатываемых ими переменных, соответственно, из строкового в числовой и из числового в строковый (см. главу 3).

Создание кнопки или панели в Word

Назначить форме кнопку или пункт меню для непосредственного вызова приложения из Word нельзя – это можно сделать только для модулей. Поэтому нужно применить следующий способ. Создайте макрос (Меню + Insert + Module) в открытом проекте:

Переименуйте этот макрос по своему усмотрению, например Teplo. И выполните следующие действия.

1. Щелкните правой кнопкой мыши в любом месте панели инструментов.

2. В этом меню выберите команду Настройка (или Сервис + Настройка).

3. В диалоговом окне Настройка щелкните на ярлыке вкладки Команды .

4. Прокрутите список Категории вниз и найдите пункт Макросы . Выберите этот пункт. В списке «Сохранить в» выберите имя вашего документа, в котором создан макрос (рис. 66).

Рис. 66. Поиск макроса для создания кнопки

5. В правом окне найдите необходимый макрос (либо VBA-программу).

6. Перетащите имя этого макроса или программы на панель инструментов.

7. Создайте соответствующую надпись кнопки и, если нужно, рисунок (при помощи правой кнопки мыши).

8. Закройте диалоговое окно Настройка, чтобы завершить работу.

По выполнении всех перечисленных пунктов будет создана кнопка запуска приложения.

Задачи на закрепление материала

Пример 31. Создать программу, позволяющую заполнять стандартные заявления студентов учебного заведения, если все необходимые данные заполняются в соответсвующих текстовых полях формы, а причина пропусков занятий выбирается из раскрывающегося списка (рис. 67, 68).

Рис. 67. Разработанная форма примера 31 в рабочем состоянии

Пример 32. Создать программу, позволяющую рассчитать сумму денег, затрачиваемых на бензин при поездке на дачу.

При этом учесть следующее: условия поездки могут быть: в одну сторону, туда и обратно, можно сесть на чужую машину (данные условия учитываются в раскрывающемся списке «условия поездки» на создаваемой форме).

Классному руководителю

группы АС-42

Сидорову О.И.

от студента(ки)

Петренко Олега Ивановича

Заявление Петренко Олег Иванович 18.05.2007

Рис. 68.

Полученный результат вычисляется по формуле:

Результат = расстояние * (потребление бензина на 100 км) / 100*цену бензина за литр.

Учесть, что если выбрали условие поездки «на чужой машине», то цена бензина равняется 0 руб.

Рис. 69. Разработанная форма примера 32 в рабочем состоянии

Также учесть, что если при вычислении результат превысит 400 руб., то выдать сообщение «Может, пойдем на рынок?».

При создании формы придерживаться рис. 69, при выводе текста в документ Word – рис. 70.

При поездке на дачу, находящуюся на расстоянии 55 км, при цене бензина за литр 18,50 руб., потребление бензина составит 101,75 руб.

Рис. 70.

Пример 33. Разработать программу, которая выдает Отчет о доходе вкладчика на настоящий момент. При этом учесть, что в интерфейсе формы процентная ставка выбирается из раскрывающегося списка (предусмотреть два вида процентов).

Рис. 71. Разработанная форма примера 33 в рабочем состоянии

При вычислении придерживаться следующих формул:

если схема вычисления простая, то

Доход = внесенная сумма + внесенная сумма * процентную ставку/100*срок/360;

если схема вычисления сложная, то

Доход = внесенная сумма + внесенная сумма * процентную ставку/100*срок/360 +0,01*(внесенная сумма * процентную ставку/100*срок/360).

При разработке интерфейса формы опираться на приведенный рис. 71, а при выводе расчетов в документ Word – рис. 72.

Отчет о доходе

На настоящий момент гражданин(ка) Евсеева Ольга Константиновна имеет на своем счету по простым процентам при начальной сумме вложения 1000 руб. за 150 дней при 2 %-ной ставке 1008,33 руб.

Рис. 72. Примерный формат вывода расчетов в документ word

Результат вычислений с соответствующими пояснениями выводится в документ Word, а в поле формы выдается числовой результат произведенных расчетов.

Пример 34. Разработать программу, позволяющую заполнять заявление на восстановление студенческого билета при его порче (украли, потерял, постирал и т. д.). Причину порчи предусмотреть в раскрывающемся списке создаваемой формы.

При работе придерживаться приведенных рис. 73 и 74.

Курсивом выделены выражения, вставляемые программой после того, как будут заполнены соответствующие текстовые поля разрабатываемой формы.

Рис. 73. Разработанная форма примера 34 в рабочем состоянии

Рис. 74. Примерный формат вывода заявления в документ word

ГЛАВА 10

Программирование в Word

10.1. Зачем программировать в Word

Word - старейшее и самое популярное приложение, входящее в состав Microsoft Office. В большинстве организаций пользователи готовят документы именно в Word.

С точки зрения программирования Word - это, прежде всего, средство для изготовления отчетов к базам данных. При этом отчет - это любой документ, который формируется на основе информации из базы данных, например: договор, акт приемки-передачи, приходный кассовый ордер, объявление на взнос наличными, распоряжение в бухгалтерию, накладная и т. п. Конечно же, к отчетам, которые можно формировать в Word, относятся и документы со сводными данными - отчеты за период, ведомости и т. п.

Автору приходилось создавать приложения с отчетами, разработанными в самых разных программных продуктах - Microsoft Access, Crystal Reports, Microsoft Reporting Services и т. д. Если ваше приложение генерирует отчеты к базам данных в Microsoft Word, то, скорее всего, такие отчеты будут не самыми быстрыми, с точки зрения их формирования, и не самыми простыми, с точки зрения программирования. Зато совершенно точно они будут самыми дружелюбными по отношению к конечному пользователю. Почему?

Очень часто на предприятии возникает необходимость исправить в форме отчета всего пару строк - например, вместо "Директор" поставить "И. О.

Директора". Если отчет создан в Crystal Reports или в Microsoft Reporting Services, придется срочно обращаться к разработчику. А через какое-то время И. О. утвердят в должности директора, и разработчику придется править отчет снова.

Если же отчет изначально создается в документе Word, то пользователь всегда может сам внести в созданный документ необходимые изменения - по-

давляющее большинство пользователей на предприятии умеют работать в Word. Срочно разыскивать разработчика уже не нужно.

У Word есть и другие преимущества. Как правило, при изготовлении отчетов

в Word значения из базы данных подставляются в шаблон отчета, который хранится в базе данных или в файле (с расширением dot). Если формат отчета сложный, с большим количеством специфического оформления (например, объявление на взнос наличными), то намного проще подготовить его шаблон

в Word, чем, к примеру, в Crystal Reports или Reporting Services.

Еще одно программное применение Word - умение работать с разными форматами документов. Эту возможность Word вполне можно использовать для массовой обработки документов.

Приведу случай из практики: в каталоге на диске у нас собралось несколько сотен "разнокалиберных" документов разных пользователей. Часть из них создана в Word разных версий, часть - просто текстовые файлы, некоторые документы в форматах HTML, XML или EML (сообщения электронной почты). На предприятии внедрена система документооборота на основе SharePoint Portal Server и нам необходимо привести все эти документы к еди-

ному формату (Word 2003) и загрузить их на SharePoint Portal Server. Конечно же, без автоматизации в такой ситуации возиться придется очень долго.

Третье программное применение Word - форматирование документов, например: программное применение стилей, поиск и замена участков текста сразу во многих документах, работа со структурой документа и т. п. Обычно такие задачи ставятся в издательствах, например, при подготовке рукописей.

10.2. Введение в программирование в Word. Объектная модель

Общая структура объектов Word выглядит так, как показано на рис. 10.1.

Но пугаться не стоит - большая часть из этих сотен объектов никогда вам не понадобится. На практике для решения большинства программных задач достаточно знать всего лишь пять объектов (с сопутствующими коллекциями):

объект Application;

объект Document (с коллекциейDocuments );

объект Selection;

объект Range ;

объект Bookmark (с коллекциейBookmarks ).

9.3. Редактор Visual Basic

После записи рассмотренного выше макроса к шаблону Normal добавился следующий текст макроса:

Sub Arial_10_bold()

“ Arial_10_bold Macro

“ Arial 10 Полужирный

With Selection.Font

Underline = wdUnderlineNone

UnderlineColor = wdColorAutomatic

StrikeThrough = False

DoubleStrikeThrough = False

Outline = False

SmallCaps = False

AllCaps = False

Color = wdColorAutomatic

Engrave = False

Superscript = False

Subscript = False

Animation = wdAnimationNone

Наверняка пользователям, незнакомым с программированием, такой текст покажется очень сложным, однако при ближайшем рассмотрении оказывается, что это простой набор параметров, которые установлены или не установлены. Установленный параметр обозначается словом True, а неустановленный – False.

Для записи макросов, как и для других команд, в Microsoft Word используется язык Visual Basic for Applications (VBA, Visual Basic для приложений). Макрос представляет собой набор команд и операторов на VBA. Каждая команда и действие в Microsoft Word представлены в виде строк формата VBA, процесс записи макроса тоже представляет собой формирование таких строк. Таким образом, пользователь имеет возможность изменить или создать макрос без повторного выполнения всей процедуры. Хотя макрос VBA можно создать в любом текстовом редакторе, не стоит пренебрегать возможностью записи макроса в Word. Макросу, созданному при помощи Microsoft Word, можно добавлять новые команды и функции, а также на таких макросах можно изучать язык VBA.

Макросы можно редактировать, используя специальную утилиту, которая входит в поставку Microsoft Office, – редактор Visual Basic (рис. 9.10).

Рис. 9.10. Окно редактора Visual Basic

Данная программа содержит возможности, которые позволяют работать с макросом: тестировать, отлаживать, запускать на выполнение. Используя этот редактор, можно добавлять, изменять и удалять объекты в макросах, создавать пользовательские диалоговые окна, отлаживать код программных процедур, просматривать и выбирать компоненты текущих проектов и библиотек, определять вид и поведение объектов макроса во время выполнения и выполнять многое другое.

Окно редактора Visual Basic можно открыть несколькими способами, например нажав кнопку Visual Basic на панели Разработчик.

Из книги Программирование автора Козлова Ирина Сергеевна

3. Переменные Visual Basic В Visual Basic переменные накапливают информацию (значения). При их применении Visual Basic занимают область в памяти компьютера, которая предназначена для сохранения этой информации. Имена переменных, составленные из символов, могут иметь длину в 255 символов.

Из книги Реестр Windows автора Климов Александр

Visual Basic Регистрация dll- и ocx-файловДанная заметка будет полезна разработчикам. Если вам часто приходится работать с ocx-файлами (а также с dll-файлами), которые требуют регистрации в реестре с помощью REGSVR.EXE, то будет гораздо удобнее внести соответствующую запись в реестр, чем

Из книги Язык программирования С# 2005 и платформа.NET 2.0. автора Троелсен Эндрю

Подход Visual Basic 6.0 Благодаря искреннему желанию насладиться более простой жизнью, многие программисты ушли от "мира каркасов" приложений на базе C(++) к более дружественным языкам, таким, как, например, Visual Basic 6.0 (VB6). Язык VB6 стал популярным благодаря тому, что он дает

Из книги Реестр Windows автора Климов А

Из книги BPwin и Erwin. CASE-средства для разработки информационных систем автора Маклаков Сергей Владимирович

Visual Basic 6.0 В Visual Basic 6.0 в отличие от пятой версии окна Code и Object появляются в нормальном, не в раскрытом виде. И приходится при каждом запуске VB6 раскрывать эти окна. Можно заставить автоматически раскрывать эти окна при каждом запуске. Создайте в соответствующем разделе

Из книги VBA для чайников автора Каммингс Стив

2.4.2. Генерация кода в Visual Basic ERwin поддерживает генерацию кода для MS Visual Basic версий 4.0 и 5.0. В качестве источника информации при генерации форм служит модель ERwin. Использование ERwin позволяет одновременно описывать как клиентскую часть (объекты, отображающие данные на экране),

Из книги Программирование для карманных компьютеров автора Волков Владимир Борисович

Что визуального в Visual Basic для приложений? К счастью, VBA во многом избавляет от необходимости нудного печатания программного кода. В одних случаях вы записываете команды, которые нужны в приложении, и используете их в качестве отправной точки при создании новой программы.В

Из книги Виртуальная библиотека Delphi автора

VBA против Visual Basic Помимо того, что VBA не позволяет вам создавать отдельные приложения, одно из основных отличий состоит в том, что программы, написанные на VBA, работают медленнее, чем программы, написанные на Visual

Из книги автора

Различия между VBA и Visual Basic VBA имеет очень много общего с Visual Basic, своим старшим братом, предназначенным для создания независимых приложений. А раз языки похожи, вы можете перенести большую часть своих навыков в программировании на VBA в Visual Basic. Однако вам следует помнить о

Из книги автора

Вызов редактора Visual Basic Редактор Visual Basic служит командным центром для работы в VBA. В нем вы должны находиться при разработке VBA-форм, создании VBA-кода, тестировании и отладке VBA программ. Экспертом по использованию редактора Visual Basic вы станете после прочтения главы 5, а пока

Из книги автора

Краткое знакомство с редактором Visual Basic Первые обращения к редактору Visual Basic могут вас озадачить. Наверное, присутствие меню и панелей инструментов вверху экрана покажется вам привычным, но вот что означает это обилие окон? Предсказать их взаимное расположение

Из книги автора

Глава 5. Редактор Visual Basic к вашим услугам. В этой главе...~ Поиск команд в системе меню редактора Visual Basic~ Отображение, перемещение и настройка панелей инструментов~ Понимание и использование закрепления панелей инструментов и окон~ Сражение с толпами окон редактора Visual Basic~

Из книги автора

Пользовательский интерфейс редактора Visual Basic Редактор Visual Basic является стандартным блюдом Microsoft- меню, панели инструментов и комбинации клавиш выглядят и работают очень похоже на Microsoft Office. Вы будете чувствовать себя как дома, если используете VBA с приложениями из Office.С

Из книги автора

Среда разработки eMbedded Visual Basic 3.0 Для краткости в этой главе для обозначения среды eMbedded Visual Basic 3.0 будет использовано сокращение eVB.Запустить eVB можно либо при помощи команды меню Пуск (Пуск? Программы? Microsoft eMbedded Visual Tools ? eMbedded Visual Basic 3.0), либо найти в папке установки

Из книги автора

Отличия eVB и Visual Basic для. NET В основном отличия VB.NET от eVB связаны с интеграцией языка VB с Compact Framework и определяются именно внутренней структурой самой CF.Типы данныхВ eVB был один-единственный тип данных на все случаи жизни, Variant, который достался eVB по наследству от VB Script. Visual

Из книги автора

Delphi и Visual Basic 1. Есть ли в Delphi эквивалент массива элементов управления из Visual Basic? Hет. Компоненты Delphi не имеют свойства Index, подобное VB. Однако, имеются три основные причины, почему вы хотите использовать их в VB, и для каждой из них есть решение в Delphi. Причина 1. Вы хотите

Модуль поиска не установлен.

VBA Word, как это делается

(Окончание. Начало в №7)

События

Событие представляет собой действие, распознаваемое объектом (например, щелчок мышью по строке меню, нажатие клавиши, открытие нового документа, закрытие приложения пользователем), для которого можно запрограммировать отклик. При наступлении события происходит активизация метода, т.е. начинают выполняться связанные с объектом заранее определенные программы и функции.

Активизация метода может произойти не только в результате действий пользователя, но и при возникновении такого события, как ошибка в программе или наступление определенного времени и т.д., в этом случае говорят, что метод активизирован системой. Доступ к процедурам обработки событий возможен из редактора VBA. При программировании какого-либо объекта, например, формы, мы имеем доступ к целому списку процедур событий. В основном причины возникновения событий различных объектов не отличаются друг от друга, причиной их возникновения остаются тот же щелчок мыши, нажатие клавишы, смена фокуса объекта и т.д., но процедуры их обработки разделяются по принадлежности к объекту.

Можно по-разному запрограммировать реакцию на щелчок мышью по полю Формы и по Командной кнопке в этой форме, процедуры обработки, казалось бы, одного события будут разными, т.к. будут принадлежать разным объектам. Также существует очередность возникновения событий, которую надо учитывать при их программировании. Например, событию Щелчок мыши (Click), предшествуют событие Нажатие клавиши мыши (MouseDown) и событие Отпускание клавиши мыши (MouseUp). Но надо заметить, что совсем не обязательно учитывать все события при написании вашей программы, нужно лишь выбрать те, которые вам действительно необходимы для работы. Обойтись без программирования обработки событий можно, но лишь только вы задумаете писать программу, где присутствуют пользовательские формы, вы сразу столкнетесь с необходимостью программирования процедур обработки событий.

Классы объектов

Другое важное понятие объектно-ориентированного программирования - это классы. Класс - это шаблон, на основе которого во время выполнения программы создается объект. Класс определяет свойства и методы объекта. Если взять пример из жизни, то в качестве класса объектов можно принять школьный класс, где объекты - это учащиеся, каждый со своими, присущими только ему свойствами. Также каждому объекту в классе присущи одно или несколько одинаковых свойств, например - возраст, по которому и определяется принадлежность объекта к классу.

Объект, который создается на основе класса, называют экземпляром класса.

Модель объектов приложения

Прежде чем приступить к созданию программ автоматизации работы с приложением, необходимо ознакомиться с моделью объектов (иерархией классов) приложения. Иерархия классов определяет связь между объектами и содержит сведения о доступе к другим объектам. Для этой цели в VBA используется окно просмотра объектов.

Окно просмотра объектов выводится следующим образом:

1. Активизируйте окно Редактор Visual Basic.

2. Выберите команду Вид\Просмотр объектов (или нажмите клавишу F2).

На экране появится окно Просмотр объектов (рис. 1).

3. Выберите требуемую библиотеку в списке библиотек, расположенном в левом верхнем углу.

В окне Классы появится список всех классов в выбранной библиотеке.

4. Выделите в списке Классы требуемый класс.

В правой части окна просмотра появится список компонент выбранного класса, т.е. его свойства, константы и методы.

5. Выделите в списке компонент нужную строку.

В окне справки, расположенном внизу, появится дополнительная информация.

Если нужна развернутая информация по компоненту класса, щелкните по значку "вопросительный знак" на панели инструментов.

ПРОГРАММИРОВАНИЕ В WORD.
Модель объектов Word

В приложении Word нам предстоит работать с его объектами. Поэтому рассмотрим их подробнее.

На рис. 2 приведена полная модель объектов Word. Главным объектом, стоящим на вершине иерархической пирамиды объектов, является сам Word, рассматриваемый как приложение (Application), на следующем уровне представлены наборы объектов (Documents, Dialogs, Windows и др.) и одиночные объекты (н-р, Selection). Каждый из них также содержит большое число объектов, свойств и методов. Например, объект Documents включает в себя объекты, которые связаны с ним, такие, как Words (слова), Paragraphs (абзацы), Bookmarks (закладки), Characters (символы), Document (документ) и т.д. Эти объекты в свою очередь содержат в себе еще объекты, свойства и методы. Те объекты, которые включают в себя схожие объекты, называют наборами или коллекциями (Collection), они отличаются именем, записанным в множественном числе (например, Documents, Windows, Words). С помощью свойств и методов, присущих объекту Коллекция, можно выделить из него один конкретный объект для обработки. Разные коллекции могут включать в себя одинаковые объекты, например, объект Words (Слова) принадлежит коллекции Documents (Документы), связан с объектом Selection (Выбор) и с объектом Range (Диапазон). Объект Words сам, в свою очередь, является коллекцией объектов. То, что объект принадлежит какой-то коллекции, не означает, что он рассматривается как часть чего-то общего.

Чтобы видеть всю модель объектов Word, воспользуемся окном Просмотр объектов в редакторе Visual Basic.

В окне редактора Visual Basic нажмите кнопку Просмотр объектов, в всплывающем меню списка Выбор библиотеки выберите Word. В правой части окна под заголовком Классы будут перечислены все наборы объектов Word, а слева - все свойства и методы выбранного объекта.

Перейдем к описанию основных объектов и коллекций объектов Word, их методов и свойств, а также примеров их использования.

Объект Application

Как было сказано выше, этот объект представляет приложение Word. Объект Application включает свойства и методы, которые возвращают объекты верхнего уровня.

Например, свойство ActiveDocument возвращает объект Document, а свойство с названием Application используется для возвращения объекта Application. Следующий пример показывает имя пользователя для Word. Это имя записывается в меню Сервис/Параметры во вкладке Пользователь. Инструкция MsgBox является функцией VBA, выводящей на экран диалоговое окно с сообщением MsgBox Application.UserName (рис. 3).

Многие из свойств и методов, которые возвращают наиболее общие объекты интерфейса пользователя - такие, как активный документ (свойство ActiveDocument) - могут использоваться без спецификатора объекта Application.

Например, вместо записи Application.ActiveDocument.PrintOut вы можете записывать просто ActiveDocument.PrintOut. Свойства и методы, которые могут использоваться без спецификатора объекта Application, рассматриваются как "глобальные". Чтобы увидеть глобальные свойства и методы в окне Просмотр Объектов, щелкните по строке <глобальные> наверху списка в блоке Классы.

Объект Application имеет более 80 свойств, отражающих все настройки приложения. Перечислим некоторые из них (табл. 1).


Как можно изменять свойства объекта Application в программе во время выполнения каких-либо действий? Существует несколько специальных процедур, с помощью которых можно это сделать. Эти процедуры имеют специальные имена и выполняются автоматически, во время некоторых операций (табл. 3).


Вставляя строки с инструкциями VBA в эти макросы, можно воздействовать на объекты, например, при создании нового документа убрать с экрана полосы прокрутки и строку состояния, записав следующий макрос в модуль Normal:

Public Sub AutoNew()

Application.DisplayScrollBars = False

Application.DisplayStatusBar = False

Вообще-то, сохранять эти макрокоманды можно в любом шаблоне или документе. Исключение составляет макрос AutoExec, который работает только из шаблона Normal.dot сохраненным в папке, указанной как папка запуска.

Подобные действия можно произвести и с помощью процедур обработки событий объекта Application.

Событий у объекта Application немного (табл. 4).

Чтобы запрограммировать отклик на события объекта Application, необходимо предварительно выполнить ряд действий:

1. Объявить объектную переменную в модуле класса.

2. Записать процедуры обработки события.

3. Инициализировать объявленный объект из другого модуля.

Как объявить Объектную переменную

Для этого необходимо создать новый модуль класса и объявить объект типа Application с событиями. Для этого выберите в меню Вставка строку Модуль класса, в окне Программа нового модуля класса введите следующий код (рис. 4):

Public WithEvents App As Word.Application

Вызовите окно свойства и измените свойство Name с Класс1 на EventClassModule.

Описание Процедур Событий

После того как новый объект был объявлен с событиями, он появится в окне Программа в раскрывающемся списке Объекты, и можно писать процедуры событий для нового объекта. (Когда вы выбираете новый объект в списке Объектов, допустимые события для него перечислены в раскрывающемся списке Процедуры.) Выбирают событие из раскрывающегося списка Процедуры, и пустая процедура добавляется к модулю класса (рис.5). Можно записывать необходимый код для обработки события.

Инициализация объявленного Объекта

До того как процедура будет выполнена, необходимо подключить объявленный в модуле класса объект (у нас он называется App) к объекту Application. Это делается следующим кодом из любого модуля.

Dim X As New EventClassModule

Sub Регистрация()

Set X.App = Word.Application

Теперь остается только выполнить процедуру Регистрация. Можно запустить ее из меню или вызвать из другой процедуры модуля. После этого объект App в модуле класса будет указывать на объект Word Application, и процедуры обработки события в модуле класса будут выполняться при возникновении событий.

Коллекция объектов Documents

Documents - это набор всех объектов Document, которые являются в настоящее время открытыми в Word.

Этому набору присущи свои свойства, методы и события.

Свойств у набора Documents немного (табл. 5).


Можно использовать свойство Documents, чтобы возвратить набор Documents. Следующий пример показывает названия открытых документов

For Each aDoc In Documents

aName = aName & aDoc.Name & vbCr "vbCr - это константа, определяющая символ возврата каретки (код 13)

Методов у набора Documents несколько больше (табл. 6).


Метод Add используется для создания нового пустого документа и добавления его к набору Documents. Следующий пример создает новый документ, основанный на шаблоне Normal.dot.

Синтаксис метода Add:

выражение.Add(Template, NewTemplate)

выражение - выражение, возвращающее объект Documents.

Template - необязательный параметр. Содержит имя шаблона, который будет использован для нового документа. Если параметр опущен, используется Normal.dot.

NewTemplate - необязательный параметр. Если параметр равен True, документ открывается как шаблон. По умолчанию значение False.

Метод Item используется для выбора конкретного элемента из набора. Элемент может быть определен по имени или по его номеру в наборе.

Синтаксис метода:

выражение.Item(Индекс)

Выражение - выражение, которое возвращает объект Documents.

Индекс - имя или индексный номер элемента набора.

Метод Item является заданным по умолчанию методом для наборов. Поэтому следующие две строки кода эквивалентны.

Application.Documents(1)

Application.Documents.Item(1)

Так же эквивалентны и следующие строки:

Application.Documents("Report.doc")

Application.Documents.Item("Report.doc")

Открывают файлы документов с помощью метода Open.

Синтаксис метода Open следующий:

выражение.Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format)

выражение - это выражение, возвращающее объект Documents.

FileName - обязательный параметр "имя файла". Этим параметром указывается путь к документу. Можно записать несколько файлов, отделяя имена файлов пробелами.

ConfirmConversions - необязательный параметр, может принимать значения True, если необходимо отобразить диалоговое окно Convert File, если файл записан не в формате Word.

ReadOnly - необязательный параметр. Равен True, если файл открывается только для чтения.

AddToRecentFiles - необязательный параметр, если равен True, то файл добавляется к списку файлов внизу меню Файл.

PasswordDocument - необязательный параметр. Содержит пароль для открытия документа.

PasswordTemplate - необязательный параметр. Содержит пароль для открытия шаблона.

Revert - необязательный параметр. Если FileName содержит имя файла уже открытого документа, то при равенстве параметра True документ повторно открывается без сохранения произведенных изменений. Если значение параметра False, то активизируется уже открытый документ.

WritePasswordDocument - необязательный параметр. Содержит пароль, запрашиваемый при сохранении изменений документа.

WritePasswordTemplate - необязательный параметр. Содержит пароль для сохранения изменений шаблона.

Format - необязательный параметр. Содержит конвертер для преобразования файла. Может быть записан одной из констант: wdOpenFormatAuto, wdOpenFormatDocument, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, или wdOpenFormatUnicodeText. Значение по умолчанию - wdOpenFormatAuto.

Для определения внешнего формата файла применяется свойство OpenFormat объекта FileConverter, которое возвращает значение, записываемое в этот параметр.

Следующий код открывает файл Sales.doc. Имя файла указывается в кавычках.

Documents.Open FileName:="C:\Мои документы\Sales.doc" " открывается документ "Sales.doc"

В следующем примере документы из набора Documents перебираются, чтобы найти в наборе документ, названный "Report.doc". Если этот документ имеется в коллекции Documents, он активизируется, если нет, то документ открывается.

For Each doc In Documents

If doc.Name = "Report.doc" Then found = True

If found <> True Then

Documents.Open FileName:="C:\Documents\Report.doc"

Documents("Report.doc").Activate

Метод Close используется для закрытия документов и имеет синтаксис:

выражение.Close(SaveChanges, OriginalFormat, RouteDocument)

выражение - выражение, которое возвращает объект Document или Documents.

SaveChanges - необязательный параметр. Определяет действие при сохранении документа. Может быть одна из следующих WdSaveOptions констант:

WdDoNotSaveChanges (не сохранять изменения);

WdPromptToSaveChanges (выдавать диалоговое окно с запросом на сохранение изменений);

WdSaveChanges (сохранять без запросов).

OriginalFormat - необязательный параметр. Определяет формат для сохранения документа. Может быть одна из следующих wdOriginalFormat констант: wdOriginalDocumentFormat, wdPromptUser, wdWordDocument.

RouteDocument - необязательный параметр. True, если документ направляется следующему получателю.

Следующая строка кода закрывает документ, названный "Report.doc", без сохранения изменения. В ней указывается параметр SaveChanges, которому константой присвоено значение "не сохранять изменения".

Documents("Report.doc").Close SaveChanges: = wdDoNotSaveChanges

Метод Save применяется для сохранения одного или всех документов. Метод имеет несколько видов записи, в зависимости от ожидаемого результата.

1. Выражение.Save.

Запись в этом виде сохраняет указанный документ или шаблон. Если документ или шаблон не были сохранены прежде, диалоговое окно Save As запрашивает пользователя относительно имени файла.

Здесь выражение - выражение, возвращающее объект Document или Template.

2. Выражение.Save(NoPrompt, OriginalFormat).

Такая запись сохраняет все документы в наборе Documents. Если документ не был сохранен прежде, диалоговое окно Save As запрашивает пользователя относительно имени файла. Также в этой записи присутствуют два необязательных параметра.

Параметр NoPrompt. Если этот параметр имеет значение True, то Word автоматически сохраняет все документы. Если значение параметра False, то Word запрашивает пользователя о сохранении каждого документа, у которого были произведены изменения.

Параметр OriginalFormat определяет путь для сохранения документов. Может быть равен одной из следующих wdOriginalFormat констант: wdOriginalDocumentFormat, wdPromptUser, или wdWordDocument.

3. Выражение.Save(Comment)

Эта запись сохранит версию указанного документа с комментариями.

Следующий пример сохраняет активный документ.

ActiveDocument.Save

Следующий пример сохраняет каждый документ в наборе Documents без запроса к пользователю.

Documents.Save NoPrompt:=True, OriginalFormat:=wdOriginalDocumentFormat

Если файл Sales.doc открыт, то следующий код сохраняет версию фйла с добавленными к нему комментариями.

For Each doc in Documents

If Instr(1, doc.Name, "Sales.doc", 1) > 0 Then

doc.Versions.Save Comment:="незначительные изменения"

Объект Document

Представляет объект Document - элемент набора Documents. В отличие от набора Documents, объект Document насчитывает более сотни свойств. В основном свойства объекта Document используются для возвращения другого объекта или набора объектов, чтобы отработать уже с его свойствами и методами. В документе в основном приходится работать со словами, параграфами, символами, закладками, поэтому рассмотрим некоторые из свойств объекта Document, возвращающие эти объекты (табл. 7).


Для того чтобы отнестись к документу из набора избирательно, можно использовать свойство ActiveDocument объекта Application.

Следующий пример использует Activate-метод, чтобы инициировать документ, названный "Document 1." Пример также устанавливает горизонтальную ориентацию страницы и печатает документ.

Documents("Document 1").Activate

ActiveDocument.PageSetup.Orientation = wdOrientLandscape

ActiveDocument.PrintOut

Свойство Bookmarks возвращает набор Bookmarks, содержащий все закладки в документе.

Этот пример отыскивает стартовую и конечную позиции для первой закладки в активном документе.

With ActiveDocument.Bookmarks(1)

BookStart = .Start

Свойство Characters возвращает набор Characters, содержащий все символы в документе.

Следующий пример показывает первый символ в отборе. Если отбора нет, то возвращается первый символ после курсора.

char = Selection.Characters(1).Text

MsgBox "первый символ - ... " & char

Другой пример возвращает количество символов в первом предложении (пробелы включаются в подсчет).

numchars = ActiveDocument.Sentences(1).Characters.Count

О событиях и методах объекта Document читайте в следующей статье.

Малышев С.А.