Форма является объектом UserForm, обладающим большим количеством свойств, методов и событий, позволяющих контролировать ее внешний вид и функционирование.
Объектная модель форм включает следующие объекты и семейства:
· ·объект UserForm инкапсулирует в себе данные о самой форме;
· · семейство controls содержит в себе все элементы управления, перечисленные выше, расположенные на форме
· ·объект Font устанавливает шрифт
· ·объекты MultiPage и TabStrip являются контейнерами для семейств Pages и Tabs (страницы и вкладки)
· · объект DataObject инкапсулирует в себе перемещаемые отформатированные текстовые данные
Таблица 1. Стандартные элементы управления, включенные в VBA
Элемент управления | Назначение |
Label (надпись, метка) | Позволяет создавать заголовки элементов управления, которые не имеют собственных встроенных заголовков |
TextBox (текстовое поле) | Окно редактируемого текста свободной формы для ввода данных. Может быть одно- и многострочным |
ComboBox (поле со списком) | Объединяет окно редактирования и окно списка |
ListBox (список) | Отображает список значений, из которых пользователь может сделать выбор |
CheckBox (флажок) | Стандартный флажок, который используется для выбора вариантов, не являющихся взаимоисключающими |
OptionButton (переключатель) | Стандартная кнопка-переключатель. Используется, когда пользователю необходимо сделать выбор между "включено/выключено" |
ToggleButton (выключатель) | Выключатели служат для той же цели, что и флажки, но выводят установки в виде кнопки, находящейся в "нажатом" или "отжатом" состоянии |
Frame (рамка) | Визуально и логически объединяет некоторые элементы управления (особенно флажки, переключатели и выключатели) |
CommandButton (кнопка) | Используется для выполнения таких действий, как Cancel (Отмена), Save (Сохранить), Ok и т.д. Когда пользователь щелкает по кнопке, выполняется VBA-процедура, закрепленная за данным элементом управления |
TabStrip (набор вкладок) | Состоит из области, в которую следует помещать другие элементы управления (такие, как текстовые поля, флажки и т.д.) |
MultiPage (набор страниц) | Состоит из нескольких страниц. Можно выбрать любую из них, щелкнув по соответствующей вкладке |
ScrollBar (полоса прокрутки) | Позволяет выбирать линейное значение, аналогичное тому, как это можно сделать при помощи счетчика |
SpinButton (счетчик) | Специальная разновидность текстового поля. Используется для ввода последовательных величин, которые заведомо находятся в определенном интервале значений (число, дата и т.п.) |
Image (рисунок) | Выводит на форме графическое изображение любом из следующих форматов: *.bmp, *.cur, *.gif, *.ico, *.jpg, *.wmf |
Таблица 3. Основные общие методы элементов управления
Метод | Описание |
Add | Позволяет добавить элемент управления во время выполнения программы |
Move | Перемещает элемент управления |
SetFocus | Устанавливает фокус на вызвавшем этот метод элементе управления. Часто применяется в программах обработки ошибок |
Zorder | Помещает объект до или после всех пересекающихся с ним объектов |
Таблица 4. Наиболее часто используемые события объектов управления
Событие | Описание |
Click | Происходит, когда пользователь выбирает элемент управления с помощью одинарного щелчка кнопкой мыши |
DblClick | Происходит, когда пользователь выбирает элемент управления с помощью двойного щелчка кнопкой мыши |
KeyDown | Происходит при нажатии пользователем какой-либо клавиши в тот момент, когда форма выполняется и имеет фокус |
KeyPress | Происходит, когда пользователь нажимает любую клавишу на клавиатуре, кроме функциональных и клавиш управления курсором |
KeyUp | Происходит, когда пользователь отпускает клавишу |
Change | Происходит при изменении значения элемента управления |
GotFocus | Происходит, когда элемент управления получает фокус |
LostFocus | Происходит, когда элемент управления теряет фокус |
Error | Используется при уведомлении об ошибке |
MouseDown | Происходит при нажатии кнопки мыши |
MouseUp | Происходит при отпускании кнопки мыши |
MouseMove | Происходит при перемещении указателя мыши |
BeforeDragOver | Происходит, пока совершается операция перемещения (drag-and-drop) элемента управления |
BeforeDropOrPaste | Происходит перед завершением операции перемещения (drag-and-drop) элемента управления |
AddControl | Происходит, когда к форме (или элементам Frame, Page или MultiPage) добавляется какой-либо элемент управления |
AfterUpdate | Происходит после обновления значения элемента управления |
BeforeUpdate | Происходит после того, как было изменено значение элемента управления, но перед тем, как был обновлен сам элемент управления |
Enter | Происходит, когда выделяется элемент управления |
Exit | Происходит, когда с элемента управления снимается выделение |
Layout | Происходит, когда изменяются размеры элемента Frame или MultiPage |
SpinDown | Происходит, когда пользователь щелкает стрелку "вниз" ("влево") кнопки счетчика |
SpinUp | Происходит, когда пользователь щелкает стрелку "вверх" ("вправо") кнопки счетчика |
Объекты и коллекции VBA, которые используются для проектирования панелей команд (инструментов, меню, контекстного меню). Создание пользовательской панели инструментов. Типичные ошибки, возникающие при создании пользовательских панелей инструментов
.
Данные о панелях команд них инкапсулируются в объектах CommandBar, совокупности образуют семейство CommandBars.
Рассмотрим некоторые важные свойства и методы объекта CommandBar.
Þ Controls — через это свойство можно получить коллекцию элементов управления CommandBarControls, которая нам, скорее всего, потребуется для работы с кнопками или элементами меню.
Þ Enabled — включение или отключение панели.
Þ Height, Left, Top и Width — очевидные свойства, относящиеся к расположению панели в окне приложения.
Þ Index, Name и NameLocal — эти свойства позволяют найти нужную нам панель в коллекции CommandBars. Name — это программное имя объекта, NameLocal — имя, которое будет видно пользователю, Index — номер данной панели в коллекции.
Для создания элемента управления (кнопки в панели инструментов) метод Add() коллекции Controls объекта CommandBar. Этот метод принимает пять необязательных параметров, из которых первые два параметра очень важны. Первый параметр Type определяет тип передаваемого в коллекцию элемента управления. Таких типов пять:
Þ msoControlButton — кнопка (т. е. в итоге получится панель инструментов);
Þ msoControlEdit — поле для ввода текста;
Þ msoControlDropdown — раскрывающийся список;
Þ msoControlComboBox — комбинированный список;
Þ msoControlPopup — пункт меню.
Важнейшие свойства и методы объекта CommandBarButton приводятся далее.
Þ Caption — надпись на элементе управления. Для кнопки выводится в виде всплывающей подсказки, а для пункта меню — название пункта.
Þ Enabled — определяет, включен или отключен данный элемент управления. Обычно используется для предупреждения ошибок пользователя.
Þ FaceId (только для кнопок) — позволяет использовать системную картинку для кнопки (не назначая ей соответствующей функции). Например, значение 4 присвоит кнопке изображение принтера. В Word и Excel встроено несколько тысяч иконок, и поэтому вместо создания новой иконки всегда есть возможность подобрать готовую.
Þ OnAction — самое важное свойство элемента управления. Его значение используется, когда элемент управления активизируется (щелчок по кнопке или пункту меню, завершение ввода текста в текстовом поле, выбор нового значения в списке). Предназначено для указания запускаемой процедуры или внешнего приложения (COM Add In). Наример: But1.OnAction = "MySub"
Коллекция CommandBars содержит, как ясно из названия, набор объектов CommandBar (этот объект представляет как панели инструментов, так и меню), каждый из которых, в свою очередь, — коллекцию CommandBarControls, а эта коллекция представляет из себя хранилище элементов, из которых и состоит меню. Таких элементов может быть три:
Þ CommandBarButton — кнопка или элемент меню, который используется для выполнения программы или подпрограммы;
Þ CommandBarComboBox — сложный элемент меню или панели управления (это может быть поле ввода, раскрывающийся список, поле со списком);
Þ CommandBarPopup — меню или вложенное меню.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MenuKiller
End Sub
Private Sub MenuBuilder()
Dim cbMenuBar As CommandBar
Set cbMenuBar = Application.CommandBars.Add(_
Name:="МоястрокаМеню", _
Position:=msoBarTop, _
MenuBar:=True, _
Temporary:=True)
With cbMenuBar
.Visible = True
With.Controls
With.Add(Type:=msoControlPopup)
.Caption = "Файл"
With.Controls
With.Add(Type:=msoControlButton)
.Caption = "Создать"
.OnAction = "NewDoc"
End With
With.Add(Type:=msoControlButton)
.Caption = "Сохранить"
.OnAction = "SaveDoc"
End With
With.Add(Type:=msoControlButton)
.Caption = "Выход"
.OnAction = "ExitApp"
End With
End With
End With