- •Тема 1. Введение в Visual Basic for Applications
- •Тема 2. Переменные и константы, процедуры и функции
- •Тема 3. Условные операторы и операторы выбора
- •Тема 4. Циклы
- •Тема 5. Создание макросов и собственных функций рабочего листа
- •Тема 6. Объекты табличного процессора Excel
- •Тема 7. Разработка пользовательского интерфейса
- •Тема 8. Работа с элементами управления
- •Тема 9. Разработка пользовательской формы
Тема 8. Работа с элементами управления
Элементы управления пользовательского диалогового окна могут встраиваться непосредственно на рабочий лист. Доступ к этим элементам управления можно получить на панели инструментов Элементы управления (в Excel, а не в VBE). Добавление элементов управления на лист требует намного меньше усилий, чем создание пользовательского диалогового окна. Более того, в данном случае необязательно создавать макросы, так как элемент управления можно связать с любой ячейкой листа. Например, если на лист вставить элемент управления Флажок, то можно связать его с определенной ячейкой, задав значение его свойства Linkedcell. Когда элемент управления Флажок установлен, связанная с ним ячейка содержит значение ИСТИНА. Как только элемент управления сбрасывается, связанная с ним ячейка приобретает значение ложь. Приведенный ниже рисунок представляет рабочий лист, на котором присутствуют встроенные элементы управления. Добавление элементов управления на лист может оказаться непростой операцией, поскольку они вставляются из двух панелей инструментов.
Панель инструментов Элементы управления. Это элементы управления ActiveX. Они являются подмножеством тех элементов управления, которые доступны в пользовательских диалоговых окнах. Такие элементы управления используются только в Excel 97 и в более поздних версиях, они не поддерживаются в Excel 5 и Excel 95.
Вы вправе использовать элементы управления на любой из этих двух панелей инструментов, но всегда помните об их различиях. Элементы управления панели инструментов Формы выполняют свои задачи иным образом, чем это делают элементы управления ActiveX. При использовании панели инструментов Элементы управления для добавления элемента управления на лист Excel переходит в режим конструктора. В этом режиме можно изменять свойства любого элемента управления на листе, добавлять или редактировать процедуры обработки событий элемента управления или изменять размер и расположение элемента управления. Для того чтобы отобразить окно свойств для элемента управления ActiveX, щелкните правой кнопкой мыши на элементе управления и в появившемся контекстном меню выберите Свойства.
Для добавления простых кнопок можно использовать элемент управления Кнопка на панели инструментов Формы, так как он обеспечивает запуск макроса. Если же применить элемент управления Кнопка панели инструментов Элементы управления, то щелчок на этой кнопке приведет к запуску процедуры обработки события (например, commandButtonl_click) в модуле кода для объекта лист. Напрямую связать макрос с этим элементом управлении нельзя.
Когда Excel находится в режиме конструктора, элементы управления использовать нельзя. Для того чтобы проверить работоспособность элементов управления, необходимо выйти из режима конструктора (щелкнув на кнопке Выход из режима конструктора на панели инструментов Элементы управления).
Эта и другие рабочие книги, которые демонстрируют применение элементов управления на рабочем листе, представлены на Web-узле издательства.
При выделении нескольких элементов управления последний из выделенных имеет белые маркеры, а не черные, как все остальные. Элемент управления с белыми маркерами используется в качестве модели, по которой определяются размеры и расположение всех остальных элементов управления.
Изменение свойств элементов управления
Каждый элемент управления характеризуется набором параметров, которые определяют внешний вид и поведение элемента управления. Свойства элемента управления можно изменять в следующих случаях.
• В момент проектирования при разработке пользовательского диалогового окна. Для этого используется окно Properties.
• В процессе выполнения, когда пользовательское диалоговое окно отображается на экране. Для этого воспользуйтесь инструкциями VBA.
Использование окна Properties
В VBE окно Properties позволяет изменять свойства выделенного элемента управления (это может быть обычный элемент управления или сама форма UserForm). Кроме того, вы вправе выбрать элемент управления с помощью раскрывающегося списка в верхней части окна Properties.
В окне Properties расположены две вкладки. Вкладка Alphabetic представляет свойства выделенного элемента управления в алфавитном порядке. Вкладка Categorized отображает свойства, сгруппированные в логические категории. Обе вкладки содержат одинаковые свойства, но в различном порядке. Для того чтобы изменить свойство, необходимо щелкнуть на нем и ввести новое значение. Некоторые свойства могут принимать только ограниченный набор допустимых значений, выбираемых из соответствующего списка. При щелчке на таком свойстве в окне Properties будет отображена кнопка со стрелкой, указывающей вниз. Щелкните на этой кнопке для того, чтобы выбрать значение из предложенного списка. Например, свойство Text Align может принимать одно из следующих значений: 1 - fmTextAlignLeft, 2 – fmTextAlignCenter и 3 - fmTextAlignRiglit.
При выделении отдельных свойств (например, Font и Picture) рядом с ними отображается небольшая кнопка с троеточием. Щелчок на этой кнопке приводит к вызову диалогового окна настройки свойства. Свойство Picture элемента управления Image стоит рассмотреть отдельно, поскольку для него необходимо указать графический файл. Еще один вариант – вставить изображение из буфера обмена. В последнем случае его сначала следует скопировать в буфер обмена, а затем выбрать свойство Picture элемента управления Image и нажать комбинацию клавиш <Ctrl+V> для вставки содержимого буфера обмена.
Если выделить два или больше элементов управления, то окно Properties будет отображать только те свойства, которые являются общими для выделенных объектов. Объект UserForm характеризуется рядом свойств, значения которых можно изменять. Эти свойства используются в качестве значений, принятых по умолчанию для элементов управления, которые добавляются в пользовательское диалоговое окно. Например, если изменить свойство Font объекта UserForm, то все элементы управления, которые вставляются в пользовательское диалоговое окно, будут использовать указанный шрифт.
Каждый элемент управления имеет как собственный набор уникальных свойств, так и ряд общих свойств, присущих другим элементам управления. Например, все элементы управления имеют свойство Name и свойства, определяющие его размер и расположение на форме (Height, Width, Left и Right).
Если вы собираетесь работать с элементом управления с помощью кода VBA, то ему стоит определить значащее имя. Например, первый элемент управления OptionButton, который добавлен в пользовательское диалоговое окно, по умолчанию получит имя OptionButton1.
В коде ссылка на этот объект будет выглядеть следующим образом: OptionButton1.Value = True. Но если элементу управления OptionButton присвоить описательное имя (например, obLandscape), то можно использовать оператор obLandscape.Value = True
Многие пользователи считают, что удобно использовать имена, которые указывают на тип объекта. В предыдущем примере был применен префикс ob для указания того, что объект представляет элемент управления OptionButton. Можно изменять значения свойств нескольких элементов управления одновременно. Например, вы вправе создать на форме несколько элементов управления OptionButton и выровнять их все по левому краю. Для этого достаточно выделить все элементы управления OptionButton и изменить значение свойства Left в окне Properties. Все выделенные элементы управления примут новое значение свойства Left.
Как было показано, объекты Range, Font, Interior, Border, Style, Worksheet и Window используются для установки различных параметров рабочего листа, при создании формы. Элементы управления придают форме различные функциональные возможности. К элементам управления относятся кнопки, переключатели, флажки и др., а также элементы мультимедиа, позволяющие проигрывать звук и видео. Excel позволяет использовать как встроенные элементы управления (кнопки, флажки, списки и т.д.), так и пользовательские, написанные самостоятельно с помощью С++. Последние называются элементами управления ActiveX. Элементы управления, как и другие объекты, имеют собственный набор свойств, методов и событий. Они могут находиться на пользовательских диалоговых окнах, рабочих листах и диаграммах, причем, в первых двух случаях элементы управления доступны через панель инструментов "Элементы управления" , а в третьем - через панель инструментов "Формы".
Обычно создание элемента управления на рабочем листе происходит при начальной разработке формы. В этом случае панель инструментов Элементы управления (Toolbox) вызывается командой Вид, Панели инструментов, Элементы управления (View, Toolbox). Для удобства работы с элементами управления во время их конструирования в Excel имеется режим конструктора, который активизируется при нажатии кнопки Режим конструктора (Design Mode) на панели Элементы управления. В режиме конструктора можно видоизменять элемент управления и задавать его свойства при отключенной реакции на события. Рассмотрим общие свойства, события и методы элементов управления, а затем свойства, характерные для элементов управления, расположенных на рабочих листах. Начнем со свойств.
Name - имя элемента управления, по которому на него производится ссылка в коде.
Caption - текст, отображаемый на элементе управления или рядом с
ним.
List - массив строк, представляющих список (ComboBox, ListBox). Каждый элемент массива - это один элемент списка. Свойство List используется, когда элементы списка находятся в объекте.
Listlndex - номер выделенного элемента списка, начиная с нуля. При этом свойство MultiSelect должно быть установлено в 0.
Value - текст, выделенный в списке или текущее значение полосы прокрутки и счетчика.
Max, Min - наибольшее или наименьшее положительное значение полосы прокрутки или счетчика SmallChange. Положительное или отрицательное целое число, определяющее величину изменения полосы прокрутки или счетчика при щелчке на одной из стрелок.
Text - устанавливает или возвращает текст, содержащийся в текстовом поле (TextBox).
AutoSize - если установлено в True, элемент управления будет иметь наименьший возможный размер, необходимый для отображения его содержимого. Это свойство отсутствует у списков (ListBox), полос прокрутки (ScrollBar) и счетчиков (SpinButton).
Enabled - если установлено в True, пользователь может работать с элементом управления. Если False - элемент управления защищен и не может получить "фокус", т.е. не может быть активизирован.
Left, Top, Width, Height - позиция и размер элемента управления в пунктах.
Visible - если установлено в True, объект отображается во время выполнения. Если False - объект скрыт.
Locked - если установлено в True, пользователь не может редактировать элемент управления во время разработки.
PrintObject - если установлено в True, объект выводится на печать, когда пользователь печатает лист. Если False - объект не печатается.
Выделим специфические свойства элементов управления, расположенных на рабочем листе.
Placement - задает условия перемещения и изменения размеров объекта. Может принимать одно из трех значений:
xlMoveAndSize - объект перемещается и изменяет размер вместе с ячейками, располагающимися под ним;
xlMove - объект перемещается, но не изменяет размер в месте с ячейками, располагающимися под ним;
xlFreeFloating - объект не перемещается и не изменяет размер вместе с ячейками, располагающимися под ним.
LinkedCell - помещает значение свойства Value в ячейку или диапазон ячеек рабочего листа.
ListFillRange - диапазон рабочего листа, с которым связано содержимое списка.
Теперь перейдем к событиям.
Click - происходит, когда пользователь нажимает и отпускает кнопку мыши на элементе управления.
DbClick - происходит, когда пользователь дважды нажимает кнопку мыши на элементе управления.
KeyPress - происходит при нажатии любой клавиши на клавиатуре, за исключением клавиш управления курсором, функциональных клавиш и клавиш управления Ctrl, Shift, Alt.
MouseDown, MouseMove, MouseUp - определяют точное положение курсора на экране, где была нажата кнопка мыши и, была ли нажата клавиша Ctrl, Shift или Alt, когда произошло событие.
Error - предоставляет информацию об ошибке, связанной с элементом управления.
SpinDown, SpinUp - изменяет значение в сторону уменьшения или увеличения соответственно.
Change - происходит при изменении значения счетчика и полосы прокрутки.
Приведем три метода обработки элементов списка (ComboBox, ListBox).
Addltem - добавляет один элемент в список. Имеет два аргумента:
pvargText - строка текста, представляющая элемент;
pvarglndex - индекс в списке, после которого вставляется элемент, для добавления элемента в вершину списка устанавливается в 0.
Removeltem - удаляет один элемент из списка с индексом pvarglndex, начинающимся с 0.
Clear - удаляет все элементы из списка.
По мере завершения работы с элементами управления надо отключить режим конструктора повторным нажатием кнопки Режим конструктора {Design Mode). Опишем операции размещения элементов управления на рабочем листе (А), изменения (задания) их свойств (В) и написания подпрограммы обработки события (С).
На панели Элементы управления нажимается кнопка выбранного элемента управления, указатель мыши приобретает вид крестика. Указатель свободно перемещается в любое место рабочего листа и, при нажатии левой клавиши мыши вычерчиваются контуры элемента. С помощью маркеров устанавливаются требуемые размеры и положение элемента управления.
Для изменения свойств элемента управления вручную необходимо его выделить щелчком мыши и нажать кнопку Свойства (Properties Window) на панели Элементы управления (Toolbox), что приведет к появлению окна "Свойства (Properties Window)", похожего на аналогичное окно редактора Visual Basic. В окне свойств следует щелкнуть на соответствующей строке второго столбца и ввести или выбрать из списка новое значение свойства. После установки свойств элемента управления переходят к написанию связанных с ними подпрограмм VBA, реагирующих на события. Например, элемент управления кнопка, расположенная на листе 1, имеет событие Click, которое происходит при нажатии пользователем на кнопку.
Чтобы увидеть или написать подпрограмму обработки события, необходимо выделить элемент управления и нажать кнопку Окно программы (View, Code), что приведет к активизации редактора Visual Basic и появлению модуля кода, куда вводится текст подпрограммы. В левой верхней части модуля кода находится раскрывающийся список с именами объектов, для которых в данном модуле создаются процедуры обработки событий. В правой верхней части модуля кода располагается раскрывающийся список с именами событий, связанных с выделенным объектом.
