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

2 семестр / Программирование на VBA

.pdf
Скачиваний:
209
Добавлен:
09.04.2015
Размер:
1.24 Mб
Скачать

Рис. 24 ü запишите в модуле рассматриваемой формы следующую процедуру (или

выберете в Procedure событие Activate):

1Private Sub UserForm_Activate()

2MsgBox ("Событие: Activate")

3End Sub

üснова запустите форму на выполнение командой Run/Run Sub/UserForm. После появления формы на экране вы увидите сообщение о том, что произошло событие Activate (рис. 25);

Рис. 25

üвыберите в Procedure событие Terminate;

üзапишите после заголовка процедуры UserForm_Terminate следующий

оператор

2MsgBox("Событие: Terminate")

üзапустите форму на выполнение командой Run/Run Sub/UserForm. После появления формы на экране щелкните на ней мышью, на экране появится сообщение (рис. 26).

Рис. 26

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

111

использовать это событие, когда для этого появятся серьезные причины.

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

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

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

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

Листинг 21 Процедуры событий UserForm2

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

2

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

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

5Private Sub UserForm_Initialize()

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

7sRED = 100

8sGREEN = 100

9sBLUE = 200

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

11End Sub

12

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

14'При каждой инициализации меняет цвет формы. При недопустимых

15'значениях sRED, sGREEN, sBLUE выдает ошибку времени исполнения

16Private Sub UserForm_Click()

17Dim i

18

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

20sRED = sRED + 20

21sGREEN = sGREEN + 10

22sBLUE = sBLUE - 20

23i = RGB(SRED, SGREEN, SBLUE)

24UserForm2.BackColor = i

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

26End Sub

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

В листинге 21 для установки свойства формы BackColor используется функция RGB, которая возвращает RGB-значение типа Long, используемое далее

112

для присвоения свойству UserForm2.BackColor. Синтаксис функции RGB: RGB(red, green, blue)

именованные аргументы: Red, Green, Blue обязательные; тип: Variant (Integer); числа в диапазоне 0–255; представляют красный, зеленый и синий компоненты цвета).

Упражнение 2

Создайте форму, выводящую сообщения на события DblClick, Deactivate, Resize.

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

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

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

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

В табл. 23 перечислены стандартные элементы управления, включенные в VBA, и описано назначение каждого элемента. Как видно из этой таблицы, к стандартным относятся практически все элементы управления, которые вам встречались в приложениях Windows. В зависимости от host-приложения VBA, в котором вы работаете, на панели Toolbox могут появляться дополнительные элементы управления, не перечисленные в табл. 23. Эти дополнительные элементы доступны через библиотеки элементов управления, поставляемые с каждым из host-приложений.

Таблица 23 Стандартные элементы управления, включенные в VBA

Элемент

Кнопка его

Назначение

управления

создающая

 

Label

 

Позволяет создавать заголовки элементов управления,

(надпись,

 

которые не имеют собственных встроенных заголовков.

метка)

 

Используйте этот элемент для того, чтобы поместить на

 

 

форму статический текст, например, инструкции, советы

 

 

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

TextBox

 

Окно редактируемого текста свободной формы для ввода

(текстовое

 

данных. Может быть одно- или многострочным

поле)

 

 

113

Элемент

Кнопка его

Назначение

 

 

 

 

 

 

управления

создающая

 

 

 

 

 

 

 

 

ComboBox

 

Этот

элемент

управления

объединяет

окно

(поле со

 

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

списком)

 

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

 

 

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

 

 

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

 

 

значениями, которые появляются в ComboBox для

 

 

эмуляции ниспадающего списка

 

 

 

ListBox

 

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

(список)

 

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

 

 

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

 

 

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

 

 

 

CheckBox

 

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

(флажок)

 

если элемент выбран, «галочку»). Используйте флажки

 

 

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

 

 

взаимоисключающими

 

 

 

 

OptionButton

 

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

(переключа-

 

выборе в центре него находится черная точка).

тель)

 

Используйте

OptionButton,

когда

пользователю

 

 

необходимо

 

сделать

выбор

между

 

 

«включено/выключено»,

«истина/ложь».

Кнопки-

 

 

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

 

 

помощи рамки для создания группы переключателей

ToggleButton

 

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

(выключа-

 

выводят

установки

в

виде кнопки

находящейся в

тель)

 

«нажатом» или «отжатом» состоянии

 

 

Frame

 

Визуально и логически объединяет некоторые элементы

(рамка)

 

управления (особенно флажки, переключатели и

 

 

выключатели). Используйте Frame, чтобы показать

 

 

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

 

 

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

 

 

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

 

 

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

CommandBut

 

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

ton

 

Отмена (Cancel), Сохранить (Save), ОК и так далее.

(кнопка)

 

Когда пользователь щелкает по кнопке, выполняется

 

 

VBA-процедура, закрепленная за данным элементом

 

 

управления

 

 

 

 

 

 

TabStrip

 

Этот элемент управления состоит из области, в которую

(набор

 

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

вкладок)

 

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

 

 

табуляции. Используйте элемент управления TabStrip для

 

 

создания диалоговых вкладок, отображающих одни и те

 

 

же данные в различных категориях

 

 

MultiPage

 

Этот элемент управления состоит из нескольких страниц.

114

Элемент

Кнопка его

Назначение

 

управления

создающая

 

 

(набор

 

Вы можете выбрать любую из них, щелкнув по

страниц)

 

соответствующей вкладке. Используйте

элемент

 

 

управления MultiPage для создания диалоговых окон с

 

 

вкладками, такими, например, как диалоговое окно,

 

 

появляющееся при выборе команды Tools/Options

 

 

(Панели инструментов/Настройка)

 

ScrollBar

 

Элемент управления ScrollBar позволяет выбирать

(полоса

 

линейное значение, аналогично тому, как это можно

прокрутки)

 

сделать при помощи счетчика

 

SpinButton

 

Элемент управления SpinButton является специальной

(счетчик)

 

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

 

 

используются для того, чтобы ввести число, дату или

 

 

какие-либо иные последовательные величины, которые

 

 

заведомо находятся в определенном интервале значений.

 

 

Щелчок по указывающей вверх стрелке счетчика

 

 

увеличивает значение в окошке, а щелчок по стрелке,

 

 

направленной вниз, соответственно, уменьшает его.

Image

 

Элемент управления Image позволяет вывести на форме

(рисунок)

 

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

 

 

графических изображений в любом из следующих

 

 

форматов: *.bmp, *.cur, *.gif, *.ico, *.jpg, *.wmf. Вы

 

 

можете обрезать и масштабировать графическое

 

 

изображение, чтобы подобрать размер элемента Image, но

 

 

только не редактировать графическое изображение.

 

 

Можно даже написать специальную VBA-процедуру,

 

 

выполняющуюся, если пользователь щелкнет по

 

 

элементу управления Image.

 

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

Таблица 24 Наиболее часто используемые свойства стандартных

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

Свойство

Где

Описание

 

 

 

 

применяется

 

 

 

 

Accelerator

CheckBox, Tab,

Содержит символ, используемый, в качестве

 

CommandButto

быстрой клавиши вызова, элемента управления. При

 

n, Label, Page,

нажатии

ALT+<клавиша

быстрого

вызова>

 

OptionButton,

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

 

 

ToggleButton

 

 

 

 

115

Свойство

Где

Описание

 

 

 

 

 

применяется

 

 

 

 

 

BackColor

Все элементы

Число, представляющее определенный цвет фона

 

 

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

 

 

 

Caption

CheckBox,

Для надписи текст, отображаемый элементом

 

CommandButto

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

 

n, Frame, Label,

надпись, которая появляется на кнопке или вкладке

 

OptionButton,

или рядом с рамкой, флажком или переключателем

 

ToggleButton,

 

 

 

 

 

 

Page, Tab,

 

 

 

 

 

 

UserForm

 

 

 

 

 

Cancel

CommandButto

Задает кнопку отмены диалогового окна. При

 

n

нажатии на эту кнопку или клавишу Esc диалоговое

 

 

окно исчезает. Только одна кнопка формы может

 

 

иметь данное свойство

 

 

 

ControlTipTe

Все элементы

Устанавливает текст, который отображается в виде

xt

управления

всплывающей подсказки (ControlTip, называемой

 

 

также ToolTip), когда указатель мыши помещается

 

 

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

 

 

 

Default

CommandButto

Определяет заданную по умолчанию кнопку. Когда

 

n

пользователь нажимает в процессе диалога клавишу

 

 

Enter, эта кнопка ведет себя так, как если бы по ней

 

 

щелкнули мышью

 

 

 

Enabled

Все элементы

Хранит значение типа Boolean, определяющее

 

управления

доступен или нет элемент управления. Если Enabled

 

 

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

 

 

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

 

 

может быть выбран

 

 

 

ForeColor

Все элементы

То же самое, что и BackColor, но устанавливает цвет

 

управления

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

 

 

правило, символов текста

 

 

 

List

ComboBox

Массив типа Variant (одно- или многомерный),

 

 

представляет список, содержащийся в элементе

 

 

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

 

 

индекс в коллекции List, чтобы получить текст для

 

 

выбранного пункта списка. Используйте методы

 

 

элемента управления Addltem и Removeltem для

 

 

добавления или удаления пунктов списка

 

Max

ScrollBar,

Переменная типа Long, определяющая максимальное

 

SpinButton

значение счетчика или значение, при котором

 

 

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

(для

 

 

вертикальной

полосы)

или

справа

(для

 

 

горизонтальной)

 

 

 

 

Min

ScrollBar,

Переменная типа Long, определяющая минимальное

 

SpinButton

значение счетчика или значение, при котором

 

 

полоса прокрутки находится в

самом низу

(для

116

Свойство

Где

Описание

 

 

 

 

 

 

 

применяется

 

 

 

 

 

 

 

 

 

вертикальной

полосы)

или

слева

(для

 

 

горизонтальной)

 

 

 

 

 

Name

Все элементы

Содержит имя элемента управления. Вы можете

 

управления

установить данное свойство только с помощью

 

 

Properties Window

 

 

 

 

 

RowSource

ComboBox

Задает источник, из которого ListBox берет список

 

 

объекта. В Excel VBA RowSource обычно использует

 

 

диапазон рабочего листа

 

 

 

 

Selected

ListBox

Возвращает массив значений типа Boolean для

 

 

списка, который допускает множественный выбор.

 

 

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

 

 

элементу, соответствующему каждому пункту

 

 

списка. Если значение элемента в массиве Selected

 

 

равно True, то соответствующий пункт списка

 

 

выбран

 

 

 

 

 

 

TabIndex

Все элементы

Число,

указывающее

положение

элемента

 

управления

управления в порядке табуляции (может иметь

 

 

значение от 0 до значения, равного количеству

 

 

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

 

 

 

TabStop

Все элементы

Значение типа Boolean, указывающее, может ли

 

управления

элемент управления быть выбран клавишей Tab.

 

 

Если значение TabStop равно False вы, тем не менее,

 

 

можете щелкнуть на элементе и таким образом его

 

 

выбрать

 

 

 

 

 

 

Value

Все элементы

Значение текущих установок элемента управления:

 

управления

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

 

 

переключатели, индекс выбранного раздела списка

 

 

или число, указывающее, текущее положение

 

 

полосы прокрутки или счетчика

 

 

 

Visible

Все элементы

Значение типа Boolean, указывающее, является ли

 

управления

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

 

 

 

Использование Toolbox (панели элементов)

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

Редактор VB в режиме разработки вместе с формой выводит на экран Toolbox (панель элементов) (если вывод этой панели не отключен при помощи меню View/Toolbox) (рис. 27). Кнопки на панели Toolbox активизируют различные инструменты, которые позволяют помещать на форму элементы управления.

117

Рис. 27

Toolbox (подобно всем другим панелям инструментов) можно настраивать. Вы можете изменить размер самой формы. Щелкните по строке заголовка

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

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

Добавив к форме кнопку, вы можете заметить, что верхний левый угол кнопки (также как и сама граница кнопки) автоматически выравнивается по шаблону сетки на форме. Это действие, называемое привязка к сетке (snap to grid), поможет вам выровнять размещенные на форме элементы управления и текст. Вы можете включать и отключать привязку к сетке, настраивать шаг сетки или скрывать ее, изменяя установки в диалоговом окне Option (Параметры) Редактора VB. Выберите Tools/Options (Сервис/Параметры) и щелкните по вкладке General (общие), чтобы вывести Form Grid Settings (Параметры сетки в форме). Выберите или сбросьте необходимые опции.

Все элементы управления формы должны иметь уникальные имена. Эти

имена следует использовать при ссылках на элемент управления в своей программе. Всякий раз, когда вы добавляете к форме новый элемент управления, VBA присваивает ему имя по умолчанию, состоящее из имени типа элемента и номера. VBA обеспечивает уникальность имени включением в имя элемента управления числа. Число в имени больше, чем число любого другого подобного элемента управления. Если кнопка, которую вы добавили в начале этого раздела, является первой кнопкой, она получит имя CommandButton1. Следующая добавленная вами кнопка будет CommandButton2 и так далее. Если после этого вы добавите поле, оно получит имя TextBox1.

Задание 4. Создайте форму, выводящую сообщение текущей даты и время. Для этого:

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

üубедитесь, что форма активна, щелкнув по ней;

üщелкните на пиктограмме с буквой в панели элементов управления;

118

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

Рис. 28

üдля надписи в нашей программе-примере измените лишь два свойства Name (Имя) на lblNow и Caption (Заголовок) – просто удалите значение свойства. Для управления свойствами предназначено окно свойств. Чтобы сделать это, найдите свойство Name в самом верху списка свойств (оно представлено как (Name)), – это единственное из свойств, заключенное в скобки. Двойным щелчком

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

üщелкните в окне формы, чтобы сделать его активным снова. При этом панель элементов управления, которая исчезла, когда вы перешли в окно свойств, возникнет снова;

üизмените значение свойства Caption на Моя первая форма;

üщелкните на той пиктограмме в панели элементов управления, на которой изображена кнопка (рис. 27);

üначав немного левее середины формы и нажав левую кнопку мыши, перетащите указатель по диагонали вниз, чтобы создать кнопку;

üизмените значение свойства (Name) на OKButton. Напомню снова, что

поскольку при создании программного кода вам придется ссылаться на кнопку по ее имени, такое имя кнопки напомнит вам о ее назначении (она получает ОК и закрывает окно);

üизмените значение свойства Caption на ОК. Этот текст увидит пользователь на кнопке во время выполнения вашей программы;

üвызовите окно программного кода формы (двойной щелчок по форме, либо View/Code, либо нажать F7, либо при помощи контекстного меню);

üдважды щелкните по кнопки ОК;

üв появившемся при этом окне программного кода должна уже присутствовать заготовка процедуры:

1Private Sub OKButton_Click()

3End Sub

üзапишите после заголовка процедуры следующий программный код

2Unload Me

оператор Unload убирает указанный объект из памяти. Здесь это объект с именем Me, имеющим в VBA специальный смысл. В данном случае оно означает форму и

119

весь ее программный код; ü напечатайте еще три строки кода:

1Private Sub UserForm_Activate()

2Dim Quote As String

3Quote = "Не повторяется такое никогда:"

4lblNow.Caption = Quote & Format(Now, "dddddd, hh ч. mm мин.")

5End Sub

Задание 5. Создайте форму, выводящую значения функции y = sin(x) .

1+ ex

Для этого:

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

üрасположите на форме следующие элементы управления (рис. 29):

TextBox1

TextBox2

Рис. 29 ü форма создана, функция каждого элемента управления известна. Для

написания кода программы, связанного с пользовательской формой, достаточно дважды щелкнуть, например, кнопку CommandButton1. Откроется редактор кода на листе модуля UserForm3. Более того, он откроется на том месте, где программируются действия, связанные с элементом управления, который был дважды нажат. Если код еще не набран, то при открытии редактора кода появятся инструкции заголовка и окончания процедуры, которая будет связана с элементом управления. Напечатайте код формы (листинг 22):

Листинг 22 Код формы UserForm3

1Private Sub CommandButton1_Click()

2Dim x As Double, y As Double

4If Not IsNumeric(TextBox1.Text) Then 'Проверка является ли введенное

5

'значение числом

6

MsgBox "Аргумент должен быть числом", _

7

vbExclamation 'Вывод окна сообщения

8TextBox1.SetFocus 'Фокус (курсор) устанавливается на поле TextBox1

9Exit Sub 'Досрочный выход из процедуры

10End If

11x = CDbl(TextBox1.Text) 'При считывании числа из поля ввода при

12

'помощи функции CDbl строковый тип, возвращаемый

13

'свойством Text, преобразуется в числовой

14

y = Sin(x)/(1+Exp(x))

120