Протестировать работу всех элементов, расположенных на листе (рис. 4.1) и описать отличия в работе элементов управления формы и элементов ActiveX. Поместить элемент ActiveX ToggleButton (Выключатель),при нажатии на который появляется сообщение «Включено!», при отжатии — «Выключено!». Описать особенности его работы по сравнению с другим кнопками
(«button»).
Пример 4.2. Использование элементов управления«Список», «Счетчик» и «Полоса прокрутки».
Открыть новый рабочий лист и поместить элемент ActiveX Список (ListBox).
Выделить рядом со списком двенадцать ячеек и присвоить этому диапазону имя Данные1, выбрав в контекстном меню команду Присвоить имя… или вызвав Диспетчер имен (Ctrl+F3).
Затем ввести значения в эти ячейки, например названия месяцев. Для заполнения списка данными из этого диапазона указать в свойстве ListFillRange значение Данные1 (можно указать и массив ячеек).
Установить связь списка с какой-либо ячейкой на листе (например, G2), изменив свойство LinkedCell.
На этом же рабочем листе поместить второй элемент управления Список, три кнопки, три переключателя и один флажок. Переименовать все элементы управления согласно рис. 4.2.
Рис. 4.2 — Часть листа Excel с элементами управления
ListBox, ScrollBar и SpinButton
Затем в окне редактирования кода флажка CheckBox1 записать:
Private Sub CheckBox1_Click()
If CheckBox1.Value Then
ListBox2.ListStyle = fmListStyleOption
Else
ListBox2.ListStyle = fmListStylePlain
End If
ListBox2.Height = 170
End Sub
Этот процедура проверяет значение флажка CheckBox1. Если флажок установлен, то стиль списка ListBox2 устанавливается равным fmListStyleOption (отображаются переключатели). Иначе устанавливается стиль fmListStylePlain (переключателей нет).
Первым двум кнопкам (Заполнить список и Очистить список)присвоить следующие процедуры:
Private Sub CommandButton1_Click() 'Обращаемся к объекту ListBox2 With ListBox2
'Очищаем содержимое
Clear
'Добавляем строки
For i = 1 To 12
.AddItem "Строка "& i
Next i
End With
End Sub
Private Sub CommandButton2_Click()
'Очищаем содержимое списка
ListBox2.Clear
End Sub
Для переключателей написать следующие процедуры, которые определяют способ выделения строк в списке:
Private Sub OptionButton1_Click() 'Выделение одной строки ListBox2.MultiSelect = fmMultiSelectSingle End Sub
Private Sub OptionButton2_Click()
'Выделение нескольких строк в списке
ListBox2.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub OptionButton3_Click()
'Выделение нескольких строк в списке с помощью Ctrl или Shift
ListBox2.MultiSelect = fmMultiSelectExtended End Sub
Третьей кнопке (Что выделено?) назначить процедуру проверки режима выделения.
Если переключателем включен режим выделения одной строки fmMultiSelectSingle, то на экран выводится значение выделенной строки или сообщение «Ничего не выделено» при отсутствии выделения. Если включен другой режим (множественное выделение), то осуществляется перебор всех строк списка и в случае обнаружения выделенной строки переменной ListFlag присваивается значение True. Затем идет проверка выделения:
если значение True, то на экран выдается сообщение — значение выделенной строки, если False, то сообщение, что ничего не выделено.
Соответствующий код выглядит следующим образом:
Private Sub CommandButton3_Click()
'Проверка выделения
Dim ListFlag As Boolean
Dim x As Integer
ListFlag = False
With ListBox2
If.MultiSelect = fmMultiSelectSingle Then
If.Text = "" Then
MsgBox "Ничего не выделено"
Else
MsgBox.Value
End If
Else
For x = 0 To.ListCount - 1
If.Selected(x) = True Then
ListFlag = True
End If
Next x
Select Case ListFlag
Case Is = False
MsgBox "Ничего не выделено"
Case Is = True
For x = 0 To.ListCount - 1
If.Selected(x) Then
MsgBox.List(x)
End If
Next x
End Select
End If
End With
End Sub
Поместить на этот же лист два элемента ActiveX Полоса прокрутки (ScrollBar) и один элемент Счетчик (SpinButton). Для всех элементов задать максимальное и минимальное значение (Min = 0 и Max = 100).
Для первой полосы прокрутки задать связанную ячейку M13, изменив свойство LinkedCell. (рис. 4.2).
Для второй полосы прокрутки создать процедуру отклика на событие Change. Записать в окне редактирования кода модуля следующий код: