Шаг 183.
VBA в MSExcel. Практические приемы программирования на VBA. Тема: работа со списком. Практика

    На этом шаге мы рассмотрим основные моменты создания указанного приложения.

    Создадим приложение, которое позволит выбрать несколько чисел, выводимых в списке в диалоговом окне Операции над элементами списка (рисунок 1).


Рис.1. Диалоговое окно Операции над элементами списка

    В группе Операция следует установить один из переключателей: Сумма, Произведение или Среднее, чтобы указать, какая операция будет выполняться над выбранными числами. Нажатие кнопки Вычислить должно привести к выполнению операции и выводу результата в поле Результат.

    Обсудим, как приведенная ниже программа решает перечисленные задачи и что происходит в программе.

UserForm_Initialize
  1. Активизирует диалоговое окно.
  2. Запрещает ввод данных в поле Результат.
  3. Назначает клавише Esc функцию кнопки Отмена, а клавише EnterВычислить.
  4. Связывает с кнопками Вычислить и Отмена, а также с переключателями всплывающие подсказки.

Нажатие кнопки Вычислить запускает на выполнение процедуру CommandButton1_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 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).

    Стоит также отметить небольшой недостаток этой программы, связанный с тем, что в ней не построен обработчик ошибок. Хотя на первый взгляд кажется, что в программе обработчик ошибок совсем не нужен, это не так. Ошибка может возникнуть, например при вычислениях, если выводимый в списке массив данных содержит как числа, так и строковые константы.

    На следующем шаге мы продолжим разработку приложений.




Предыдущий шаг Содержание Следующий шаг