Шаг 194.
VBA в MSExcel. Практические приемы программирования на VBA. Тема: управление размером и перемещением элементов управления. Практика

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

    Для решения задачи нахождения чистого текущего объема инвестиций и управления размером диалогового окна с помощью редактора пользовательских форм cоздадим диалоговое окно Чистый текущий объем инвестиций (рисунок 1).


Рис.1. Диалоговое окно Чистый текущий объем инвестиций

    Отметим, что данное приложении предназначено для расчета до шести финансовых операций (инвестиций и прибыли).

    При инициализации диалогового окна его отображение на экране имеет меньшую ширину (в нем только поля ввода для двух выплат), хотя при его конструировании в него помещается поля ввода для всех шести выплат. При помощи счетчика Число операций можно управлять шириной диалогового окна так, чтобы было достаточно места для размещения в нем того количества полей ввода данных, которое задается счетчиком (рисунок 2).


Рис.2. Диалоговое окно Чистый текущий объем инвестиций со значением счетчика Число операций равным 4

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

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

Нажатие кнопки Вычислить запускает на выполнение процедуру CommandButton1_Click
  1. Создает массив, элементами которого являются инвестиции и прибыли, и массив лет, когда совершались операции.
  2. Проверяет корректность ввода данных.
  3. Вычисляет чистый текущий объем инвестиций.

Нажатие кнопки Отмена запускает на выполнение процедуру CommandButton2 _Click
Закрывает диалоговое окно.

SpinButton1 _Change
Изменяет при помощи счетчика размер диалогового окна благодаря управлению свойством Width в зависимости от введенного числа операций.

    Приведем полный текст приложения.

' Переменная уровня модуля
Dim n As Integer
' n - число операций

Private Sub CommandButton1_Click()
  ' Процедура расчета чистого текущего объема инвестиций

  Dim Операции(1 To 6) As Double
  Dim Годы(1 To 6) As Double
  Dim Процент As Double
  Dim i As Integer
  Dim ТекущийОбъем As Double
  ' Операции - массив инвестиций и прибылей
  ' Годы - массив лет, когда совершались операции
  ' Процент - годовая процентная ставка
  ' ТекущийОбъем - объем чистого начального.вклада
  ' i - вспомогательная переменная'

  Dim ПолеВвода(1 To 6, 1 To 2) As Object
  ' Вспомогательный массив объектов, который будет
  ' использоваться при вводе данных из полей ввода

  ' Задание компонент массива объектов
  Set ПолеВвода(1, 1) = TextBox1
  Set ПолеВвода(2, 1) = TextBox2
  Set ПолеВвода(3, 1) = TextBox3
  Set ПолеВвода(4, 1) = TextBox4
  Set ПолеВвода(5, 1) = TextBox5
  Set ПолеВвода(6, 1) = TextBox6
  Set ПолеВвода(1, 2) = TextBox7
  Set ПолеВвода(2, 2) = TextBox8
  Set ПолеВвода(3, 2) = TextBox9
  Set ПолеВвода(4, 2) = TextBox10
  Set ПолеВвода(5, 2) = TextBox11
  Set ПолеВвода(6, 2) = TextBox12
'
  ' Проверка того, являются ли введенные в диалоговом окне значения числами
  For i = 1 To n
    If IsNumeric(ПолеВвода(i, 1).Text) = False Then
       MsgBox "Ошибка в размере прибыли или инвестиции", _
              vbInformation, "Расчёт инвестиции"
       ПолеВвода(i, 1).SetFocus
       Exit Sub
    End If
  Next i
  For i = 1 To n
    If IsNumeric(ПолеВвода(i, 2).Text) = False Then
       MsgBox "Ошибка в годе", _
              vbInformation, "Расчёт инвестиции"
       ПолеВвода(i, 2).SetFocus
       Exit Sub
    End If
  Next i
  If IsNumeric(TextBox14.Text) = False Then
   MsgBox "Ошибка в процентной ставке", vbInformation, _
           "Расчёт инвестиции"
   TextBox14.SetFocus
   Exit Sub
  End If
  ' Ввод в массивы Операции и Годы данных из диалогового окна
  For i = 1 To n
   Операции(i) = CDbl(ПолеВвода(i, 1).Text)
   Годы(i) = CDbl(ПолеВвода(i, 2).Text)
  Next i
'
  ' Ввод процентной ставки
  Процент = CDbl(TextBox14.Text) / 100

  ' Расчет чистого текущего объема инвестиции
  ТекущийОбъем = 0
  For i = 1 To n
     ТекущийОбъем = ТекущийОбъем + Операции(i) / (1 + Процент) ^ Годы(i)
  Next i

  ' Вывод в диалоговом окне величины чистого текущего объема инвестиций
  ТекущийОбъем = Format(ТекущийОбъем, "fixed")
  TextBox15.Text = CStr(ТекущийОбъем)
End Sub

Private Sub CommandButton2_Click()
  ' Процедура закрывает диалоговое окно
  UserForm1.Hide
End Sub

Private Sub SpinButton1_Change()
  ' Процедура изменения размера диалогового окна
  ' в зависимости от введенного числа операций
  ' Вывод числа операций со счетчика в поле ввода
  TextBox13.Text = CStr(SpinButton1.Value)

  ' Присвоение значения переменной n (числа операций) из поля ввода
  n = CInt(TextBox13.Text)

  ' Изменение размера диалогового окна
  UserForm1.Width = 210 + (n - 1) * 42
End Sub
Private Sub UserForm_Initialize()
  ' Процедура активизации диалогового окна
  
  ' Чистый текущий объем инвестиций
  ' Устанавливается первоначальное значение счетчика
  SpinButton1.Value = 2

  TextBox13.Enabled = False
  TextBox15.Enabled = False

  ' Назначение клавише <Enter> функции кнопки Вычислить
  CommandButton1.Default = True

  ' Назначение функции клавиши <Esc> кнопке Отмена
  CommandButton2.Cancel = True

  ' Установка максимального и минимального
  ' допустимого значений счетчика, а также текста всплывающей подсказки
  With SpinButton1
   .Max = 6
   .Min = 1
   .ControlTipText = "Ввод числа операций"
  End With
End Sub
Текст этого примера можно взять здесь.

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




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