Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1568

.pdf
Скачиваний:
6
Добавлен:
30.04.2022
Размер:
1.4 Mб
Скачать

 

 

Продолжение табл. 7.6

SaveAs

Сохраняет документ в

Document

 

другом файле

 

Select

Выбирает указанный

Bookmark, Document,

 

объект

Field и в др. объектах

8. ГРАФИЧЕСКИЙ ИНТЕРФЕЙС

8.1. Формы пользователя

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

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

Для добавления к проекту новой формы используйте ко-

манду VB-редактора Insert | UserForm (Вставка | UserForm).

Редактор VB добавляет к текущему проекту новую форму, присваивая ей по умолчанию имя UserFormN и используя ту же систему нумерации, что и для модулей. Редактор VB выводит новую форму в режиме разработки. В режиме разработки можно добавлять или удалять элементы управления к форме, устанавливать свойства формы или ее элементов управления и выполнять другие манипуляции с внешним видом формы в интерактивном режиме. Когда форма выведена и используется

123

как часть выполняющейся программы, она находится в режиме

выполнения.

Когда форма выводится на экран в режиме разработки, можно протестировать ее поведение, используя команду Run | Run Sub/UserForm (Запуск | Запуск подпрограммы/UserForm).

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

8.2. Свойства объекта UserForm

Форма как объект имеет некоторые встроенные свойства, и вы можете устанавливать эти свойства или программным образом, или в Properties Window (окне свойств) редактора VB. Строго говоря, данные способы изменения свойств форм не являются эквивалентными. Некоторые из свойств могут быть установлены только посредством Properties Window. Программным способом свойства форм устанавливаются таким же образом, как и свойства других объектов: путем присвоения свойству нового значения.

Таблица 8.1 Часто используемые свойства объектов UserForm

Свойство Описание

ActiveControl Возвращает объектную ссылку на элемент управления, находящийся в фокусе в данный момент. Только для чтения

BackColor Целое типа Long определяет цвет фона формы. Самый простой способ установить это свойство - использовать Properties Window;

124

 

Продолжение табл. 8.1

 

чтобы выбрать желаемый цвет (если необхо-

 

димо), можно скопировать номер цвета из

 

Properties Window в свою программу

Caption

Текст, выводимый в качестве заголовка фор-

 

мы. Запись/Чтение

Controls

Возвращает коллекцию всех элементов

 

управления формы. Только для чтения

Cycle

Определяет, должно ли нажатие клавиши та-

 

буляции вызывать последовательный выбор

 

всех элементов управления во всех группах и

 

на каждой странице многостраничных эле-

 

ментов управления или только в пределах

 

текущей группы или страницы. Может со-

 

держать одну из двух встроенных констант:

 

fmCycleAllForms или fmCycleCurrentForm.

 

Чтение/Запись

Enabled

Содержит значение типа Boolean, указы-

 

вающее, доступна ли форма. Если его значе-

 

ние равно False, ни один из элементов управ-

 

ления формы не доступен. Чтение/Запись.

Font

Возвращает ссылку на объект Font, посред-

 

ством которого вы можете выбрать парамет-

 

ры шрифта формы или элемента управления

ForeColor

То же самое, что и свойство BackColor, но

 

 

устанавливает цвет, используемый для пе-

 

 

реднего плана (обычно - это цвет текста)

 

 

объекта формы

 

8.3. Методы объекта UserForm.

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

125

дуль класса процедуры Property Get и Property Let. Можно создавать экземпляры подкласса вашей UserForm с помощью оператора Dim и ключевого слова New. Однако чаще всего вы будете манипулировать объектом формы при помощи стандартных методов и свойств класса UserForm и при помощи собственных процедур обработки событий для определенной вами формы и ее элементов управления.

В табл. 8.2 перечислены наиболее часто используемые методы для объектов UserForm, которыми вы можете воспользоваться, и кратко изложены их свойства. Эти методы будут доступны для каждой формы, которую вы добавляете в свой проект.

 

Таблица 8.2

 

Методы для объектов UserForm

Метод

Назначение

Copy

Копирует выделенный в элементе управления

 

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

Cut

Вырезает выделенный в элементе управления

 

текст и помещает его в буфер обмена Windows

Hide

Скрывает UserForm, не выгружая ее из памяти,

 

сохраняя значения элементов управления формы

 

и всех переменных, объявленных в модуле класса

 

формы

Paste

Вставляет содержимое буфера обмена Windows в

 

текущий элемент управления

PrintForm

Выводит на используемый в Windows по умолча-

 

нию принтер изображение формы, включая все

 

данные, введенные в элементы управления

Repaint

Перерисовывает форму, выведенную на экран.

 

Используйте этот метод, если хотите перерисо-

 

вать форму, не ожидая, когда она будет перери-

 

сована через обычный период времени

Show

Выводит форму на экран. Если форма еще не за-

 

гружена в память, то данный метод сначала ее

 

загружает

126

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

В данной синтаксической конструкции FormName может быть любым объектом UserForm текущего проекта. FormName - имя формы в том виде, в каком оно отображается в Project Explorer.

Если форма в данный момент не загружена в память, метод Show загрузит и выведет на экран. Если форма уже загружена, метод Show просто выведет ее экран. В любом случае этот метод выводит форму и затем передает ей правление. Форма будет оставаться на экране до тех пор, пока не будет выполнен метод Hide объекта UserForm или форма не будет выгружена при помощи оператора Unload.

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

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

8.4. События и событийные процедуры

Событие (event) - это что-то, что может произойти с диалоговым окном или элементом управления диалогового окна. Типичные примеры событий: щелчок на кнопке, переключателе и т.д. Другие примеры событий: изменение содержимого окна редактирования или выбор элемента списка. Щелчок мышью, нажатие клавиши и действия внутренние для вашего компьютера, - все они запускают или, иными словами, влекут за собой события.

Использование событий позволяет создавать действительно диалоговые приложения. В таких приложениях все

127

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

Такие объекты, как формы и элементы управления приводят в действие, то есть делают доступными, некоторые события. Можно написать собственные VBA-процедуры, реагирующие на события. Такие процедуры, называются событий-

ными процедурами (event procedures) или процедурами обработки событий.

Событийные процедуры следует записывать в модуль класса, который является частью UserForm. При этом такие процедуры должны иметь имена в виде ObjectName_ EventName, где ObjectName - имя формы или элемента управления, a EventName - имя события, с которым вы хотите работать. Такой формат имени позволяет VBA сопоставлять заданному событию требуемую процедуру.

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

 

 

 

Таблица 8.3

 

События объектов UserForm

 

 

Синтаксис заго-

 

 

Событие

ловка процедуры

Описание

 

обработки события

 

 

Activate

Private Sub object_

Инициируется

всякий раз,

 

Activate()

когда окно формы становит-

 

 

ся активным.

Используйте

 

 

событие для обновления со-

 

 

держимого диалоговых эле-

 

 

ментов управления, чтобы

 

 

отразить любые изменения,

128

Продолжение табл. 8.3

 

 

которые произошли,

пока

 

 

окно формы было неактив-

 

 

ным

 

 

 

 

 

Click

Private Sub

Инициируется

всякий

раз,

 

Оbject_Click (index

когда по форме (любой ее

 

As Long)

части, не занятой элемента-

 

 

ми

управления)

щелкают

 

 

мышью

 

 

 

 

DblClick

Private Sub object_

Инициируется

всякий

раз,

 

DblClick (index As

когда по форме (любой ее

 

Long, ByVal Cancel

части, не занятой элемента-

 

As MSForms. Re-

ми

управления)

дважды

 

turnBoolean)

щелкают мышью

 

 

Deactivate

Private Sub object_

Инициируется

всякий

раз,

 

Deactivate()

когда форма перестает быть

 

 

активной

 

 

 

 

Initialize

Private Sub ob-

Инициируется

всякий

раз,

 

ject_Initialize ()

когда форма впервые загру-

 

 

жается в память посредст-

 

 

вом

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

 

 

Load или с помощью метода

 

 

Show. Используйте это со-

 

 

бытие для

инициализации

 

 

элементов

управления фор-

 

 

мы при ее появлении на эк-

 

 

ране

 

 

 

 

 

Resize

Private Sub User-

Инициируется

при

измене-

 

Form_Resize ()

нии размеров формы

 

Terminate

Private Sub object_

Инициируется всякий раз,

 

Terminate ()

когда форма выгружается из

 

 

памяти. Используйте это со-

 

 

бытие для осуществления

 

 

любых специальных слу-

 

 

жебных задач, которые не-

129

Окончание табл. 8.3

обходимо выполнить прежде, чем переменные формы будут выгружены

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

Load Object

Unload Object

Здесь Object представляет любую допустимую ссылку на объект UserForm.

Оператор Load загружает в память объект UserForm и запускает метод формы Initialize, но не выводит форму на экран. Когда форма загружена, можно использовать написанную на VBA программу для работы с объектом UserForm. Оператор Unload удаляет из памяти UserForm, а также все переменные формы. После того как форма выгружена, она перестает быть доступной для VBA-кода.

8.5. Элементы управления

Объект UserForm может содержать те же элементы управления, что и находящиеся в диалоговых окнах Word, Excel или других приложений Windows. Элементы управления (controls) - это элементы диалогового окна, которые дают возможность пользователю взаимодействовать с программой. Они включают в себя кнопки-переключатели, текстовые поля, линейки прокрутки, командные кнопки и так далее.

Многие производители программного обеспечения разрабатывают пакеты, расширяющие набор элементов управления. Вы можете добавлять элементы управления (известные как объекты ActiveX и Automation) к панели Toolbox (панели элементов), предварительно создавая ссылку из вашего проекта на библиотеку, содержащую расширенный набор элементов

130

управления. После этого можно добавлять данные элементы управления на панель Toolbox.

Каждый элемент управления - это объект с определенными свойствами, методами и событиями. Как и для формы, их содержащей, вы можете устанавливать свойства элементов управления программным путем или посредством Properties Window редактора VB. В программе вы можете присваивать или восстанавливать значения свойств элементов управления также как для любых других объектов.

В табл. 8.4 представлены стандартные элементы управления, включенные в VBA, а также назначение этих элементов.

Таблица 8.4 Стандартные элементы управления VBA

Элемент

Назначение элемента

 

управления

 

 

 

Label (надпись,

Позволяет создавать заголовки

элементов

метка)

управления, которые не имеют собственных

 

встроенных заголовков. Используйте этот

 

элемент для того, чтобы поместить на фор-

 

му статический текст, например, инструк-

 

ции, советы по заполнению других диало-

 

говых элементов управления

 

TextBox (тек-

Окно редактируемого текста

свободной

стовое поле)

формы для ввода данных. Может быть од-

 

ноили многострочным

 

СomboBox (по-

Этот элемент управления объединяет окно

ле со списком)

редактирования и окно списка. Используйте

 

его, когда хотите предложить пользователю

 

выбрать значение, но при этом дать ему

 

возможность ввести данные, отсутствую-

 

щие в списке. Вы можете также ограничить

 

выбор только теми значениями, которые

 

появляются в ComboBox для эмуляции нис-

 

падающего списка

 

131

 

Продолжение табл. 8.4

ListBox (список)

Отображает список значений, из которых

 

пользователь может сделать выбор. Окна

 

списка можно использовать, чтобы дать

 

возможность пользователю выбрать только

 

одно значение или же несколько

CheckBox (фла-

Стандартный флажок (квадратное окно, со-

жок)

держащее «галочку», если элемент выбран).

 

Используйте флажки для выбора вариантов,

 

которые не являются взаимоисключающи-

 

ми

OptionButton

Стандартная кнопка-переключатель (круг-

(переключатель)

лое окно, при выборе в центре него нахо-

 

дится черная точка). Используйте Option-

 

Button, когда пользователю необходимо

 

сделать выбор между «включено/выключе-

 

но», «истина/ложь». Кнопки-переключате-

 

ли, как правило, объединяются вместе при

 

помощи рамки для создания группы пере-

 

ключателей

ToggleButton

Выключатели служат для той же цели, что и

(выключатель)

флажки, но выводят установки в виде кноп-

 

ки находящейся в «нажатом» или «отжа-

 

том» состоянии

Frame (рамка)

Визуально и логически объединяет некото-

 

рые элементы управления (особенно флаж-

 

ки, переключатели и выключатели). Ис-

 

пользуйте Frame, чтобы показать пользова-

 

телю, какие элементы управления в диало-

 

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

 

бы выделить группу элементов управления,

 

отделяя ее от остальных элементов управ-

 

ления, находящихся в диалоговом окне

CommandButton

Используйте кнопки для выполнения таких

(кнопка)

действий, как Cancel (Отмена), Save (Со-

 

хранить), ОК и так далее. Когда пользова-

132