Урок 3
Тема: Работа со списком
Цель урока
В
данном уроке создается приложение, на примере которого вы сможете научиться:
Заполнять списки
Выбирать несколько элементов из списка
Выполнять специфицированную операцию над
выбранными элементами из списка
Практика
Создадим
приложение, которое позволит выбрать несколько чисел, выводимых в списке в
диалоговом окне Операции над элементами списка (рис. У3.1).
В группе Операция следует установить один из
переключателей: Сумма, Произведение или Среднее, чтобы указать, какая операция
будет выполняться над выбранными числами. Нажатие кнопки “вычислить”
должно привести к выполнению операции и выводу результата в поле Результат.
Рис. У3.1. Диалоговое окно “Операции над элементами списка”
Обсудим,
как приведенная ниже программа решает перечисленные задачи и что происходит в
программе.
Userform_Initialize |
1.Активизирует диалоговое окно 2. Запрещает ввод данных в поле результат 3. Назначает клавише “Esc” функцию кнопки “Отмена”, а клавише “Enter” —“Вычислить” 4. Создает всплывающие подсказки |
Нажатие кнопки “Вычислить” запускает на
выполнение процедуру CommandButton_Click |
Определяет, какой переключатель выбран. В
зависимости от выбранного переключателя производит действие над выбранными в
списке числами. Найденное число выводиться в поле “Результат” |
Нажатие кнопки “Отмена” запускает на
выполнение процедуру CommandButton2_Click |
Закрывает диалоговое окно |
Private Sub
CommandButton1_Click()
' Процедура проведения вычислений с выбранными элементами списка в
зависимости от выбранной операции
Dim
i As Integer
Dim
n As Integer
' i - вспомогательная переменная
' n - играет роль счетчика числа выбранных элементов из списка
Dim
Сумма As Double
Dim
Произведение As Double
Dim
Среднее As Double
Dim
Результат As Double
' Сумма - сумма выбранных элементов из списка
' Произведение - произведение выбранных элементов из списка
' Среднее - среднее арифметическое значение выбранных элементов из
списка
' Результат - в эту переменную записывается результат, найденный
' в зависимости от выбранного переключателя
' При выборе первого переключателя вычисляется сумма выбранных
элементов
If
OptionButton1.Value = True Then
Сумма = 0
With
ListBox1
For i = 0 To
.ListCount - 1
If .Selected(i) =
True Then
Сумма = Сумма + .List(i)
End If
Next i
End
With
Результат = Сумма
End If
' При выборе второго переключателя вычисляется произведение
'выбранных элементов
If
OptionButton2.Value = True Then
Произведение = 1
With UserForm1.ListBox1
For i = 0 To
.ListCount - 1
If .Selected(i) =
True Then
Произведение = Произведение * .List(i)
End If
Next i
End With
Результат
= Произведение
End If
' При выборе третьего переключателя вычисляется
'среднее арифметическое значение выбранных элементов
If OptionButton3.Value =
True Then
Среднее = 0
n = 0
With ListBox1
For i = 0 To
.ListCount - 1
If .Selected(i)
= True Then
n = n + 1
Среднее = Среднее + .List(i)
End If
Next i
End With
Результат = Среднее / n
End
If
' Результат выводится в поле Результат
TextBox1.Text
= CStr(Format(Результат, "Fixed"))
End
Sub
Private
Sub CommandButton2_Click()
' Процедура закрытия диалогового окна
UserForm1.Hide
End
Sub
Private
Sub UserForm_Initialize()
' Процедура инициализации диалогового окна
' Заполнение списка и установка режима выбора
' нескольких элементов из списка i
With
ListBox1
.List = Array(1, 3,
4, 5, 6, 7, 8, 10)
.ListIndex = 0
.MultiSelect
= fmMultiSelectMulti
End With
' Первоначальный выбор переключателя Сумма при
' инициализации диалогового окна и задание
' текста всплывающих подсказок у переключателей
With
UserForm1.OptionButton1
.Value = True
.ControlTipText = "Сумма выбранных элементов"
End
With
OptionButton2.ControlTipText = "Произведение выбранных элементов"
OptionButton3.ControlTipText = "Среднее значение выбранных элементов"
CommandButton2.ControlTipText = "Выход из программы"
' Поле Результат не доступно для пользователя
TextBox1.Enabled = False
' Назначение клавише <Enter> функции кнопки Вычислить
' и задание текста всплывающей подсказки
With
CommandButton1
.Default = True
.ControlTipText = "Нахождение результата"
End With
' Назначение клавише <Еsс> функции
кнопки Отмена и задание текста всплывающей подсказки
CommandButton2.Cancel =
True
' Задание заголовка пользовательской формы
UserForm1.Caption =
"Операции над элементами списка"
UserForm1.Show
End Sub
Самостоятельное задание
Интересной особенностью
приводимой процедуры инициализации UserForm_Initialize является то, что заголовок диалогового окна вводится программно при
помощи свойства Сaption, а не вручную при
помощи окна Свойства
Стоит также отметить небольшой недостаток этой программы, связанный с
тем, что в ней не построен обработчик ошибок. Хотя на первый взгляд кажется что в программе обработчик ошибок совсем не нужен,
это не так. Ошибка может
возникнуть, например при вычислениях, если выводимый в
списке массив данных содержит как числа, так и строковые константы.
В
качестве самостоятельного задания составьте программу нахождения среднего балла
студентов, выбранных из списка в диалоговом окне Средний балл (рис УЗ 2). Список заполните из данных, введенных из
диапазона на рабочем листе с помощью свойства RowSource объекта ListBox. Фамилии студентов пусть будут расположены в столбце А, а их оценки в столбце В диапазона с
данными о студентах. Для этого используется следующий оператор
Private Sub UserForm_Initialize()
With UserForm2.ListBox1
.ColumnCount
= 2
.RowSource
= "a1:b4"
End
With
End Sub
Создайте
в программе обработчик ошибок, который будет проверять, являются ли данные из
второго столбца списка с оценками студентов числами. Если хотя бы одно из этих
данных не являются числом, программа должна проинформировать об этом
пользователя с просьбой исправить найденную некорректность. Обратите внимание
также на то, чтобы в диалоговом окне Средний балл надписи на кнопках ок и Отмена для большей
презентабельности были выведены полужирным шрифтом увеличенного размера.
Рис. УЗ.2.
Диалоговое окно Средний балл