На этом шаге мы рассмотрим основные моменты создания указанного приложения.
Создадим приложение, которое позволит выбрать несколько чисел, выводимых в списке в диалоговом окне Операции над элементами списка (рисунок 1).
Рис.1. Диалоговое окно Операции над элементами списка
В группе Операция следует установить один из переключателей: Сумма, Произведение или Среднее, чтобы указать, какая операция будет выполняться над выбранными числами. Нажатие кнопки Вычислить должно привести к выполнению операции и выводу результата в поле Результат.
Обсудим, как приведенная ниже программа решает перечисленные задачи и что происходит в программе.
Приведем полный текст приложения.
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 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() ' Процедура инициализации диалогового окна ' Заполнение списка и установка режима выбора ' нескольких элементов из списка With ListBox1 .List = Array(1, 3, 4, 5, 6, 7, 8, 10) .ListIndex = 0 .MultiSelect = fmMultiSelectMulti End With ' Первоначальный выбор переключателя Сумма при ' инициализации диалогового окна и задание ' текста всплывающих подсказок у переключателей With OptionButton1 .Value = True .ControlTipText = "Сумма выбранных элементов" End With OptionButton2.ControlTipText = "Произведение выбранных элементов" OptionButton3.ControlTipText = "Среднее значение выбранных элементов" ' Поле Результат не доступно для пользователя TextBox1.Enabled = False ' Назначение клавише <Enter> функции кнопки Вычислить ' и задание текста всплывающей подсказки With CommandButton1 .Default = True .ControlTipText = "Нахождение результата" End With ' Назначение клавише <Esc> функции кнопки Отмена ' и задание текста всплывающей подсказки CommandButton2.Cancel = True ' Задание заголовка пользовательской формы UserForm1.Caption = "Операции над элементами списка" UserForm1.Show End Sub
Интересной особенностью приводимой процедуры инициализации UserForm_Initiaiize является то, что заголовок диалогового окна вводится программно при помощи свойства Caption, а не вручную при помощи окна Свойства (Properties).
Стоит также отметить небольшой недостаток этой программы, связанный с тем, что в ней не построен обработчик ошибок. Хотя на первый взгляд кажется, что в программе обработчик ошибок совсем не нужен, это не так. Ошибка может возникнуть, например при вычислениях, если выводимый в списке массив данных содержит как числа, так и строковые константы.
На следующем шаге мы продолжим разработку приложений.