Урок 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. Диалоговое окно Средний балл