Основы программирования на VBA для Microsoft Excel. Учебное пособие
.pdf
Использование всплывающих подсказок к элементам управления
При работе с панелями элементов управления удобно иметь поясняющие сведения к элементам управления.
Для напоминания о назначении элементов управления им назначают всплывающие подсказки (примечания), возникающие при наведении указателя на объект.
Для отображения всплывающих подсказок необходимо дать команду Сервис/ Настройка/ Параметры и установить флажок Отображать подсказки для кнопок.
Группирование элементов управления
Схожие по смыслу элементы управления (например, переключатели) можно объединять в группы. Группировка улучшает внешний вид интерфейса и позволяет быстрее ориентироваться в нем.
Графическим объектом, с помощью которого выполняется визуальная группировка элементов управления, является объект Рамка, служащий контейнером для других объектов.
Объект Рамка присутствует на панели Форма. Этот же объект с именем Frame можно найти и на панели Toolbox редактора VBA.
Процесс группирования состоит в следующем:
1)на рабочем листе или на форме создается объект Рамка (Frame);
2)в Рамку помещаются требуемые элементы управления;
3)с помощью клавиши Ctrl выделяются все элементы управления, включая рамку;
4)в контекстном меню выбираем пункт Группировка/ Группиро-
вать.
Внешний вид объекта Рамка со встроенными в него объектами типа Переключатель показан на рис. 6.
Рис. 6. Группировка элементов управления с помощью объекта Рамка
71
4.ОСНОВЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ
ВMS EXCEL
Создание и использование форм
Форма – это важнейший визуальный компонент приложения. Она представляет собой видимое окно, подобное окнам операционной системы Windows, где размещаются визуальные компоненты, образующие интерфейс приложения.
Таким образом, форма служит контейнером для всех других компонентов. На основе формы начинается конструирование приложения.
Программы, написанные на VBA, могут входить в состав форм (UserForm), стандартных модулей (Module) и модулей классов (Class).
Создание нового приложения в редакторе VBA начинается с вставки пустой формы командой Insert/ UserForm. Эту команду можно дать из панели меню VBA или из контекстного меню окна проекта.
Вместе с формой на экране появляется панель инструментов (Toolbox) с набором элементов управления. Панель инструментов отображается при условии, что форма активна. Активизируется форма щелчком мыши на графическом изображении формы.
Панель инструментов содержит пиктограммы элементов управления, которые могут быть помещены на форму, а также кнопку со стрелкой для выбора добавленных на форму объектов.
Каждое приложение имеет несколько форм. Форма может быть модальной и немодальной. Немодальная форма позволяет переключиться в другую форму приложения без своего закрытия. Модальная форма, наоборот, требует обязательного закрытия перед обращением к любой другой форме приложения. Сделать форму модальной можно так:
ShowModal = True
Основные сведения о формах. Характеристики формы
Форма представляет собой обычное окно, содержащее вверху строку заголовка. На форме присутствует кнопка Закрыть, но нет кнопок Свернуть и Развернуть и нет меню управления.
Как и любой объект, форма имеет свойства, методы и события. Например, форма имеет такие общие для объектов свойства, как Caption, Name. Кроме этого, форма может иметь собственные специфические свойства, методы и события.
72
При создании формы выполняется код ее инициализации, устанавливающий начальные значения свойств формы и ее управляющих элементов. Кроме того, выполняются дополнительные операции, которые происходят однократно при создании формы (например, чтение данных и загрузка их в список). Код инициализации прописывается в процедуре
UserForm_initialize(),
которая является частью программного кода формы.
Окно кода формы можно получить, нажав клавишу F7. Обратный переход на форму обеспечивается комбинацией клавиш Shift+F7. Отобразить форму на экране можно также двойным щелчком мыши на имени формы в окне проводика проекта или с помощью команды ме-
ню View/ Object.
При создании форма может получить новый заголовок, в комбинированный список ComboBox могут быть загружены данные из ячеек электронной таблицы, а командная кнопка может быть заблокирована.
Пример такой инициализации формы выглядит следующим образом:
Private Sub UserForm_initialize() UserForm1.Caption = "Сотрудники" ComboBox1.RowSource = "a1: a5" CommandButton1.Enabled = False
End Sub
Формы по мере необходимости можно отображать и скрывать, назначая методы Show или Hide. Процедура Show отображает форму в немодальном режиме, а сама форма переводится на передний план. Процедура Hide скрывает форму. Отображением формы можно также управлять, назначая свойству Visible значения True или False.
Даже если форма не видима, ее компонентами можно управлять, например, из других форм. Если форма уже видима, то вызов метода Show переводит форму на передний план и передает ей фокус управления.
При нажатии кнопки мыши в области формы происходит ее активизация и форме передается фокус управления. При потере фокуса формой происходит ее деактивизация.
Для настройки свойств формы и элементов управления удобно применять панель свойств. Это позволит уменьшить объем программ-
73
ного кода. Окно свойств формы, как и любого другого выделенного объекта формы, можно получить, нажав клавишу F4 либо выбрав пункт Properties в контестном меню выделенного объекта.
Большинство свойств форм относится к их внешнему виду, размерам и местонахождению окон. Однако существуют и свойства, определяющие другие характеристики форм. Наиболее важные свойства форм представлены в табл. 7.
|
Т а б л и ц а 7 |
|
Свойства форм |
|
|
Свойство |
Описание |
Name |
Определяет имя формы |
Caption |
Определяет заголовок формы |
Enabled |
Определяет доступность, значения – True или False |
ShowModal |
При установке в True нельзя перейти к другим формам |
Основные методы и события форм приведены в табл. 8 и 9.
|
|
Т а б л и ц а |
8 |
|
|
Методы форм |
|
|
|
|
|
Вызов метода |
|
Описание |
|
UserForm1.Show |
|
Отобразить форму |
|
UserForm1.Hide |
|
Скрыть форму |
|
Unload UserForm1 |
|
Удалить форму из памяти |
|
Copy(),Cut(),Paste() |
|
Обмен данными через буфер обмена |
|
|
|
Т а б л и ц а |
9 |
|
|
События форм |
|
|
|
|
|
Событие |
|
Описание |
|
Initialize |
Инициализации формы при подготовке ее к открытию |
|
|
Click и DblClick |
Реакция на одиночный или двойной щелчок мыши |
|
|
Error |
Возникает при обнаружении ошибки |
|
|
Terminate |
Возникает при нормальном завершении работы формы |
|
|
Так как форма служит контейнером для хранения других элементов управления, то главное ее событие – это Initialize. Все остальные события обычно используются не для формы, а для расположенных на ней элементов управления.
74
Форма как контейнер содержит в себе другие управляющие элементы, которые могут получать фокус ввода (фокус). Метод SetFocus позволяет передать фокус управления элементу на форме. Например, для того чтобы передать фокус управления элементу TextBox2, используется следующий фрагмент кода:
TextBox2.SetFocus
Свойство ScrollBars отвечает за отображение на форме полос прокрутки и может принимать четыре значения: 0, 1, 2, 3. Если ScrollBars = 0, полосы прокрутки не отображаются. Значение 1 соответствует отображению горизонтальной, а значение 2 – вертикальной полосы прокрутки. Если ScrollBars = 3, отображаются обе полосы прокрутки.
Для обеспечения автоматического вывода списка всех свойств и методов выбранного объекта нужно дать команду меню Tools/ Options и в появившемся окне Options установить галочку в пункте Auto List Members.
Если эта опция включена, то после ввода имени объекта и точки будет выводиться весь список его методов и свойств.
Для обращения к текущей форме вместо ее имени можно использовать ключевое слово Me. Точка, установленная после этого слова, приводит к выводу методов и свойств текущей формы.
Свойства и методы имеют разные иконки, по которым их можно
раличать. Например, иконка
обозначает свойство, а иконка
– метод.
В верхней части окна редактирования кода формы находятся два раскрывающихся списка. В левом списке отображены имена объектов, которые в данный момент находятся на форме, и объект UserForm, т. е. сама форма.
Если в левом списке выбрать объект, то в правом списке будут отображены доступные события этого объекта. После выбора события в окне кода появится заготовка процедуры обработки этого события.
Элементы управления и их применение
Элементы управления – это объекты, которые можно размещать на формах VBA и на документах MS Office, в частности на листах книги
Excel.
75
Эти элементы используются для управления работой приложения со стороны пользователя. Они реагируют на события, которые возникают при нажатии на кнопку, при вводе значений и т. д. Большинство элементов управления имеет графическое представление.
В VBA используется широкий набор стандартных элементов управления, которые имеют различное назначение. Часто используемые элементы приведены в табл. 10.
|
|
|
Т а б л и ц а 10 |
|
|
Элементы управления |
|
|
|
|
|
Тип элемента |
Вид |
|
Описание |
|
|
|
|
Label |
|
|
Надпись (Поле для вывода текста) |
|
|
|
|
TextBox |
|
|
Текстовое поле (Поле для ввода текста с воз- |
|
|
|
можностью его редактирования) |
|
|
|
|
ComboBox |
|
|
Комбинированный список выбора (Поле с рас- |
|
|
|
крывающимся списком) |
|
|
|
|
ListBox |
|
|
Список (Список выбора) |
|
|
|
|
CheckBox |
|
|
Флажок (Независимая кнопка выбора) |
|
|
|
|
OptionButton |
|
|
Переключатель (Зависимая кнопка выбора) |
|
|
|
|
ToggleButton |
|
|
Выключатель |
|
|
|
|
Frame |
|
|
Группа |
|
|
|
|
CommandButton |
|
|
Командная кнопка |
|
|
|
|
TabStrip |
|
|
Набор вкладок |
|
|
|
|
MultiPage |
|
|
Набор страниц |
|
|
|
|
ScrollBar |
|
|
Полосы прокрутки |
|
|
|
|
SpinButton |
|
|
Счетчик |
|
|
|
|
Image |
|
|
Рисунок |
|
|
|
|
76
Для добавления элементов управления на форму используется панель инструментов ToolBox. По умолчанию эта панель отображается при вставке новой формы командой Insert/ UserForm. Манипулировать ее отображением и скрытием можно командой View/ Toolbox.
Панель ToolBox содержит шаблоны объектов. Выделив один из шаблонов, можно по нему создать соответствующий объект на форме. Наборы однотипных объектов создаются путем копирования существующего объекта в буфер обмена и вставки его копии в форму.
При создании объектов на форме им присваиваются стандартные имена типа Label1, Label2, TextBox1, TextBox2 и т. д. Для изменения имен управляющих элементов нужно в свойстве Name окна свойств соответствующего объекта затереть старое имя и указать новое. Окно свойств выбранного объекта можно отобразить, нажав клавишу F4 или командой меню View/ Properties Window.
Аналогичным образом можно изменять и надписи объектов, используя свойство Caption. Установить значение свойства можно и программно, например:
Label2.Caption="Итого:"
Программно можно получить также значение свойства, например:
TextBox2= Label2.Caption
Некоторые объекты имеют свойство Value. Это свойство можно также использовать для установки и получения значений полей.
Пример установки значения объекта:
TextBox2.Value = 123
Пример получения значения объекта:
Label2.Caption = TextBox2.Value
Свойство Value имеет тип Variant.
Элемент управления Label (Надпись)
Используется для вывода сообщения на форме, в частности для надписей тех объектов, у которых нет собственного свойства Caption, например, как у объекта TextBox. Надпись обычно располагается рядом с объектом и указывает его назначение. Caption – cамое главное свойство надписи, оно задает текст, который выводится на форме.
77
По умолчанию надписи имеют имена Label1, Label2 и т.д. Имя надписи можно изменить, заменив в окне свойств значение свойства Name на новое. Текст надписи можно задать с помощью свойства Caption, например:
Label2.Caption="Итого: "
Элемент управления TextBox (Текстовое поле)
Этот объект предназначен для ввода информации во время работы программы или вывода информации, задаваемой его свойством Text. При значении свойства Enabled=False информацию в текстовом поле изменить нельзя. Редактировать значение текстового поля можно, если свойство Enabled принимает значение True. Это значение устанавливается по умолчанию.
По умолчанию текстовые поля имеют имена TextBox1, TextBox2 и т. д. Другое имя текстового поля можно задать в окне свойств Properties Window этого объекта с помощью свойства Name.
Свойство Visible отвечает за отображение объекта на форме. Для скрытия объекта это свойство должно принять значение False, например:
TextBox1.Visible = False
Отображаемый объект имеет значение этого свойства True: TextBox1.Visible = True
Для автоматического изменения размеров объекта на форме в зависимости от длины введенного текста свойство Autosize должно иметь значение True:
TextBox1. AutoSize= True
Если размеры объекта менять не нужно, то свойство AutoSize следует установить в False.
Свойства объектов можно устанавливать программно, как это сделано здесь, так и с помощью окна свойств объекта (Properties Window).
Элемент управления ComboBox (Поле со списком)
Этот объект содержит поле и раскрывающийся список и позволяет выбрать в поле необходимый элемент из списка или ввести информацию в поле вручную. Текущее значение в объекте ComboBox отобра-
78
жается в поле, а значения элементов списка выводятся при нажатии кнопки со стрелкой.
По умолчанию свойство Style этого объекта принимает значение 0. В этом случае данные в поле могут быть введены пользователем и применены либо как критерий выбора элементов в списке, либо как новое значение, не содержащееся в списке. Данные в поле можно и не вводить, а выбрать из раскрывающегося списка.
Второе значение, которое может приобрести свойство Style, равно цифре 2. Программно установить это значение можно оператором ComboBox.Style=2. Напомню, что устанавить значение можно и в окне свойств (Properties Window).
При значении ComboBox.Style=2 в поле можно выбрать данные только из списка. Ввести новые данные или изменить выбранные данные в поле нельзя. Для выбора элемента нужно открыть список, нажав на кнопку со стрелкой, и указать требуемый элемент.
Для заполнения списка применяется метод AddItem. Например, добавить элемент в список можно так:
ComboBox1.AddItem "Январь"
Индексация элементов в списке начинается с нуля. Получить значение индекса элемента, находящегося в поле ComboBox, можно, используя свойство Value или ListIndex. Примеры:
TextBox1 = ComboBox1.Value TextBox1 = ComboBox1.ListIndex
При использовании свойства Text можно получить значение не индекса элемента, а самого выбранного элемента списка. Пример:
TextBox1 = ComboBox1.Text
Элемент управления ListBox (Список)
Этот элемент используется для хранения списка значений, из которого можно выбрать один или несколько элементов. Этим он отличается от элемента ComboBox, где можно выбрать только один элемент.
По умолчанию спискам назначаются имена ListBox1, ListBox2 и т. д. В зависимости от значения свойства MultiSelect, равном 0, 1 или 2, в списке можно выбрать соответсвенно один элемент, несколько последовательно расположенных элементов или несколько произвольно расположенных элементов.
79
Примеры программной установки вариантов выбора элементов из списка:
ListBox1. MultiSelect=0
ListBox1. MultiSelect=1
ListBox1. MultiSelect=2
Часто используемые свойства списка приведены в табл. 11.
|
Т а б л и ц а 11 |
|
Свойства списка |
|
|
ListIndex |
Возвращает номер текущего элемента списка |
ListCount |
Возвращает общее количество элементов в списке |
TopIndex |
Возвращает элемент списка с наибольшим номером |
ColumnCount |
Устанавливает число столбцов в списке |
TextColumn |
Устанавливает столбец в списке |
Text |
Возвращает выбранный в списке элемент |
List (row, column) |
Возвращает элемент списка |
RowSourse |
Устанавливает диапазон, содержащий элементы списка |
ControlCourse |
Устанавливает диапазон (ячейку), куда возвращается |
|
выбранный элемент из списка |
MultiSelect |
Устанавливает способ выбора элементов списка |
Для добавления в список новых элементов применяется метод AddItem. Например, добавить элемент в список можно так:
ListBox1.AddItem "Январь"
Для удаления элемента из списка используется метод RemoveItem, например:
ListBox1.RemoveItem 0,
где 0 – это индекс элемента в списке.
Элемент управления CheckBox (Флажок)
Этот элемент имеет свойство Value, которое может принимать значения True или False. Значению True соответствует наличие флажка в средине квадрата, который визуально представляет объект CheckBox. Отсутствие флажка соответствует значению False. Щелчки по элементу позволяют переводить его из состояния True в состояние False и наоборот.
80
