Создание форм. Свойства, события и методы форм

Форма

Форма – это главный объект, образующий визуальную основу приложения. По своей сути форма представляет собой окно, в котором можно размещать различные управляющие элементы при создании приложений. Для создания формы необходимо выполнить команду ВставкаUserForm. В окне Конструктора форм появится форма, имеющая стандартный вид для ОС Windows.

Как и любой другой объект VBA форма имеет набор свойств, основные из которых приведены в таблице 1. Для получения справки по любому свойству достаточно выделить его в окне свойств и нажать F1.

Таблица 1 – Основные свойства формы

Свойство Описание
BackColor Цвет фона для формы.
BorderStyle Определяет тип границы, окружающей форму
Caption Текст, который выводится в заголовке формы.
Font Определяет тип и вид шрифта в форме.
Height Определяет высоту формы в твипах.
(Name) Имя объекта, для программы VBA.
Width Определяет ширину формы в твипах.

Свойства можно изменять в режиме конструирования в окне свойств, либо программно в режиме выполнения. Например, в ходе выполнения программы можно изменить заголовок формы командой: frmForm1.Caption = "Привет". Программы для ПК в ОС Windows управляются событиями. Каждый раз, когда нажимается кнопка, перемещается мышь, изменяются размеры формы и т.д., ОС генерирует сообщение. Сообщение доставляется соответствующему объекту, например форме, а та генерирует соответствующее событие. Следовательно, можно составить фрагмент программы, в котором объект будет реагировать на событие определенным образом, т.е. любому стандартному событию соответствует определенная процедура. Чтобы просмотреть события связанные с формой, необходимо в режиме конструирования дважды щелкнуть на ней – появится окно программы, в котором щелкнуть на списке Процедура. В таблице 2 приведены наиболее часто используемые события.

Таблица 2 – Основные события форм

Событие Описание
Initialize Происходит во время конфигурации и до загрузки формы в память.
Activate Происходит после загрузки формы в память.
Deactivate Происходит, если форма перестает быть активной.
Click Происходит при нажатии левой кнопки мыши на форме.

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

Private Sub UserForm_Activate()

frmForm1.Caption = "Щелчок на форме уменьшает её размеры"

End Sub

Private Sub UserForm_Click()

frmForm1.Width = frmForm1.Width / 2

frmForm1.Height = frmForm1.Height / 2

frmForm1.Caption = "Сделай это еще раз!"

End Sub

Также форма обладает набором методов и инструкций. Метод определяет действие, которое может быть выполнено с объектом. Инструкция инициирует действие. Она может выполнить метод или функцию, В таблице 3 и 4 приведены наиболее часто используемые методы и инструкции для работы формами.

Таблица 3 – Основные методы форм

Метод Описание
Hide Скрывает объект UserForm, но не выгружает его.
Show Выводит на экран объект UserForm.

Таблица 4 – Основные инструкции форм

Инструкция Описание
Load Загружает объект UserForm, но не отображает его на экране.
Unload Удаляет объект UserForm из памяти.

В следующем примере предполагается, что в проекте созданы две формы frmForms. При запуске проекта происходит событие Initialize для формы frmForm1, форма frmForm2 загружается и выводится на экран. Когда при помощи мыши выбирается frmForm2, она делается невидимой, и появляется форма frmForm1. Если же выбирается frmForm1, frmForm2 появляется вновь.

'Событие Initialize формы frmForm1.

Private Sub UserForm_Initialize()

Load frmForm2

frmForm2.Show

End Sub

'Событие Click для формы frmForm2

Private Sub UserForm_Click()

frmForm2.Hide

End Sub

'Событие Click для формы frmForm1

Private Sub UserForm_Click()

frmForm2.Show

End Sub

Выбор и использование управляющих элементов

Создание управляющих элементов на форме выполняется с помощью Панели инструментов, которая выводится на экран командой Вид → Панель элементов (рисунок 2).

Рисунок 2 – Панель управления.

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

Каждый управляющий элемент (объект) характеризуется набором свойств (которые можно изменять в режимах конструирования или выполнения), событий и методов.

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

Таблица 5 – Рекомендуемые сочетания первых трех символов имен

Объект Первые 3 символа имени Пример имени
Форма frm frmMyForm
Надпись lbl lblInfo
Текстовое поле txt txtInput
Командная кнопка cmd cmdExit
Флажок chk chkSound
Переключатель opt optLevel
Список lsb lsbTypes
Рамка fra fraChoices
Полоса прокрутки vcb vcbSpeed
Рисунок pic picChema

Командная кнопка является самым распространенным элементом управления, и может использоваться для организации выполнения вычислений и других действий, вызова процедур и функций пользователя, открытия форм и т.д. Основные свойства командной кнопки представлены в таблице 6. В свойстве Caption можно ставить символ & перед буквой, которая будет использоваться в сочетании с клавишей Alt для ускоренного доступа к кнопке. Также можно перейти к кнопке клавишей Tab, а затем нажать Enter.

Таблица 6 – Свойства командных кнопок

Свойство Описание
BackColor Цвет фона кнопки.
Caption Текст, который выводится на кнопке.
Enabled Значение False делает кнопку недоступной.
Font Определяет тип и вид шрифта на кнопке.
ForeColor Определяет цвет шрифта на кнопке.
(Name) Имя объекта, для программы VBA.
Picture Добавляет рисунок на кнопку.
PicturePosition Определяет расположение текста и рисунка на кнопке.
Visible Значение False делает кнопку невидимой.

Основным событием кнопки является Click. Для написания программного кода, который будет выполняться при нажатии командной кнопки, достаточно два раза щелкнуть на ней левой кнопкой мыши в режиме конструирования проекта.

Наиболее полезным методом командной кнопки является SetFocus, позволяющий вернуться к кнопке (передать ей фокус). Например, следующая команда позволяет вернуться к кнопке по умолчанию после ввода данных в текстовое поле: cmdMyButtum.SetFocus

Текстовое поле применяется для ввода или вывода информации. Основные свойства текстового поля представлены в таблице 7.

Таблица 7 – Свойства текстового поля

Свойство Описание
Enabled Значение False делает поле недоступным.
Font Определяет тип и вид шрифта в текстовом поле.
ForeColor Определяет цвет шрифта в текстовом поле.
(Name) Имя объекта, для программы VBA.
MaxLength Определяет количество вводимых символов в текстовое поле.
PasswordChar Определяет символ, отображаемый при вводе в текстовое поле.
Text Определяет содержимое текстового поля.

Например, для очистки содержимого текстового поля в ходе выполнения программы необходимо ввести в требуемом месте программного кода команду:

txtResult.Text=" "

Основным событием текстового поля является Change, происходящее при вводе или удалении символов. Например, команду cmdMyButtum.SetFocus можно поместить в процедуру события Change текстового поля.

Надпись применяется как самостоятельно для вывода справочной информации, так и в виде "подсказок" для текстового поля, списка или другого элемента. Главное её отличие от текстового поля в том, пользователь не может изменить текст надписи (хотя его можно изменить как свойство во время выполнения программы). Основные свойства надписи представлены в таблица 8.

Таблица 8 – Свойства надписи

Свойство Описание
Caption Определяет текст, содержащийся в надписи.
Font Определяет тип и вид шрифта надписи.
ForeColor Определяет цвет шрифта надписи.
(Name) Имя объекта, для программы VBA.
Picture Добавляет рисунок в надпись.
PicturePosition Определяет расположение текста и рисунка надписи.

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

Таблица 9 – Свойства списка

Свойство Описание
(Name) Имя объекта, для программы VBA.
ListIndex Возвращает номер текущей выделенной строки списка – 1.
Text Содержимое текущей выделенной строки списка.

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

Работа со списком начинается с его заполнения методом AddItem, который может вызываться несколько раз подряд. Часто метод AddItem помещается в процедуру UserForm_Initialize (), чтобы список заполнялся при загрузке формы.Метод RemoveItem удаляет строки из списка. Метод Clear очищает сразу весь список. Следующий пример показывает, как работают списки, при этом предполагается, что в проекте создана форма с двумя списками (List1 и List2). Двойной щелчок на любой строке одного списка перемещает её в другой список. Строка включается в другой список до того, как она будет удалена из текущего.

Private Sub UserForm_Initialize ()

List1.AddItem "Стол"

List1.AddItem "Стул"

List1.AddItem "Диван"

List1.AddItem "Кресло"

List1.AddItem "Кровать"

End Sub

Private Sub List1_DblClick ()

List2.AddItem List1.Text

List1.RemoveItem

List1.ListIndex

End Sub

Private Sub List2_dblClick ()

List1.AddItem List2.Text

List2.RemoveItem

List2.ListIndex

End Sub

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

Таблица 10 – Свойства переключателя

Свойство Описание
Caption Задает текст, определяющий назначение переключателя.
(Name) Имя объекта, для программы VBA.
Value Значение True указывает, что переключатель выбран.

Наиболее важным является свойство Value значение True (переключатель находится в установленном состоянии), которого в режиме конструирования задается только у одного переключателя в группе. В режиме выполнения это свойство чаще всего проверяется в процедуре события Click кнопки, нажатой после установки нужного переключателя, что позволяет проверить перед вызовом следующей процедуры некоторое условие. Однако определенные действия можно выполнять сразу же после выбора переключателя в процедуре его события Click.

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

Наиболее часто используемым событием флажков является Click, в процедуре которого можно проверять состояние флажка по свойству Value. Следующий пример иллюстрирует работу флажков, при этом предполагается, что в проекте создана форма с двумя флажками (ChkBold и ChkInalic) и текстовым полем TxtExam (см. рисунок 3). После ввода символов в текстовое поле, с помощью флажков можно делать текст полужирным или курсивом. Свойства FontBoldи FontItalic текстового поля устанавливают способы начертания текста.

Рисунок 3 – Использование флажков.

Private Sub Chkbold_Click()

If ChkBold.Value = True Then TxtExam.FontBold = True Else TxtExam.FontBold = False

End If

End Sub

Private Sub ChkItalic_Click()

If ChkBold.Value = True Then TxtExam.FontItalic = True Else TxtExam.FontItalic = False

End If

End Sub

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

Рисунок используется для простейшего вывода изображения на форме. Он может отображать растровые файлы (.BMP), значки (.ICO), метафайлы (WMF), а также файлы в формате JPEG (.JPG) и GIF (.GIF). Основные свойства рисунка представлены в таблице 11.

Таблица 11 – Свойства рисунка

Свойство Описание
Autosize Значение True подгоняет размер элемента под размер содержимого.
(Name) Имя объекта, для программы VBA.
Picture Задает файл для рисунка.

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

Событие Initialize инициализируется при загрузке формы при помощи оператора Load или метода Show. При выполнении команды Run/Run Sub/UserForm это событие не инициализируется. Это событие следует использовать при первой загрузке формы для установки каких-либо свойств формы и ее элементов управления. В следующем примере для этого события устанавливается свойство формы BackColor.

Для создания формы, изменяющей фон цвета на событие Click. Для этого:

- выберите команду Insert/UserForm(Вставка/UserForm );

- дважды щелкните на форме в режиме разработки и введите следующие процедуры событий UserForm2 (см. листинг ниже):

Процедуры событий UserForm2

Dim sRED, sGREEN, sBLUE 'переменные для задания цвета формы

'Процедура обработки события Initialize

'инициализируется один раз: при загрузке

Private Sub UserForm_Initialize()

' задаем начальный цвет формы

sRED = 100

sGREEN= 100

sBLUE= 200

UserForm2.BackColor= RGB(sRED, sGREEN, sBLUE)

End Sub

'Процедура обработки события Click

'При каждой инициализации меняет цвет формы. При недопустимых значениях sRED, sGREEN, sBLUE выдает ошибку времени исполнения:

Private Sub UserForm_Click()

Dim i

'Меняем цвет формы:

sRED = sRED+ 20

sGREEN = sGREEN + 10

sBLUE= sBLUE - 20

i = RGB(SRED, SGREEN, SBLUE)

UserForm2.BackColor= i

UserForm2. Caption= "Цвет: " & Str(i)'Изменить заголовок формы:

End Sub

После вывода формы с именем UserForm2 на экран событие Click будет приводить к изменению цвета и заголовка формы.

В листинге для установки свойства формы BackColor используется функция RGB, которая возвращает RGB-значение типа Long, используемое далее для присвоения свойству UserForm2.BackColor. Синтаксис функции RGB: RGB(red, green, blue); именованные аргументы: Red, Green, Blue – обязательные; тип: Variant (Integer); числа в диапазоне 0 – 255; представляют красный, зеленый и синий компоненты цвета).


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

Средства автоматизации разработки текстовых документов.
Работа с объектами MS Word.

1. Цель работы:

1.1. изучение возможностей разработки текстовых документов с использованием стандартных объектов.

1.2. Формирование у студентов знаний, умений и навыков, необходимых для решения профессиональных задач в области автоматизации работы с MS Word.

2. Приборы и оборудование:

2.1. Методические указания.

2.2. ПЭВМ типа IBM PC/XT.

2.3. MS Word.

2.4. Visual Basic for Application.

3. Порядок выполнения работы:

3.1. Изучить основные теоретические сведения (Приложение А).

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

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

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

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

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

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

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

3.3. Создайте форму, изменяющую фон цвета, имя формы. На форме расположите необходимые элементы (см. рисунок 1).

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

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

Рисунок 1 – Пример оформления формы.

3.6. Задайте различное форматирование исходному тексту (см. рисунок 2).

Рисунок 2 – Пример проекта.

3.7. Создайте кнопку или панель в Вашем проекте для непосредственного вызова приложения (пример).

3.8. Добавьте комментарии. Текст и результат выполнения программы занести в отчёт.

3.9. Сформулируйте выводы по проделанной работе.

4. Содержание отчёта:

4.1. Тема работы.

4.2. Цель работы.

4.3. Приборы и оборудование.

4.4. Порядок выполнения работы.

4.5. Выводы.

4.6. Контрольные вопросы.

5. Контрольные вопросы:

5.1. Перечислите и опишите основные объекты Word.

5.2. Какие свойства имеет объект Word.Application?

5.3. Опишите классы, задающие структуризацию текста документа.

5.4. Какие события имеет объект Document?

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

5.6. Опишите объекты Range и Selection.

5.7. Каким образом вставить текст в документ при работе с приложениями?

5.8. Как назначить форме кнопку или пункт меню для непосредственного вызова приложения из Word?


Приложение А

Теоретические сведения

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

Объект Word.Application

Дополнительно ко всем возможностям программирования на VBA, можно добавить возможности вывода всех результатов вычислений, преобразований, сообщений в документ 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 может реагировать на три события, возникающие в результате действий пользователя.

Таблица 1 События объекта Document

Событие Пользователь
Open Добавляет в коллекцию Documents существующий документ, открывая файл, хранящий документ
New Создает документ
Close Закрывает документ

Документ и его части

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

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) – эти коллекции и их элементы отражают независимые, но близкие по духу понятия. Это части документа, косвенно связанные с ним. При нормальном просмотре документа они могут быть и не видны.

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

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

c) Еще один способ комментирования – сноски. Они могут быть двух видов: подстраничные (внизу страницы) и концевые (в конце документа). Первые собраны в коллекцию 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.


Приложение Б