Самоучитель VBA

       

Практика



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

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

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

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

Рис. У6.2. Диалоговое окно

Чистый текущий объем инвестиций со значением счетчика

Число операций равным 4




UserForm_Initialize

  1. Активизирует диалоговое окно.

  2. Назначает клавише <Esc> функцию кнопки отмена, а клавише <Enter> — вычислить.

    Устанавливает максимальное и минимальное значения счетчика, а также его значение при инициализации диалогового окна.

Нажатие кнопки вычислить запускает на выполнение процедуры

CoramandButtonl_Click

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

Нажатие кнопки отмена запускает на выполнение процедуру

CoramandButton2_Click

Закрывает диалоговое окно.

SpinButtonl Change

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

'

' Переменная уровня модуля

'

Dim n As Integer

'

' n - число операций

'

Private Sub CommandButtonl_Click()

'

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


'

Dim Операции(1 То 6) As Double

Dim Годы(1 То 6) As Byte

Dim Процент As Double

Dim i As Integer

Dim ТекущийОбъем As Double

' Операции - массив инвестиций и прибылей

' Годы - массив лет, когда совершались операции

' Процент - годовая процентная ставка

' ТекущийОбъем - объем чистого начального.вклада

' i - вспомогательная переменная

'

Dim ПолеВвода(1 То 6, 1 To 2) As Object

'

' Вспомогательный массив объектов, который будет

' использоваться при вводе данных из полей ввода

' Задание компонент массива объектов

'

Set ПолеВвода(1, 1) = TextBoxl

Set ПолеВвода (2, 1) = TextBox2

Set ПолеВвода(3, 1) = TextBox3

Set ПолеВвода(4, 1) = TextBox4

Set ПолеВвода(5, 1) = TextBox5

Set ПолеВвода(6, 1) = TextBox6

Set ПолеВвода(1, 2) = TextBoxl0

Set ПолеВвода(2, 2),= TextBoxl1

Set ПолеВвода(3, 2) '= TextBoxl2

Set ПолеВвода(4, 2) = TextBoxl3

Set ПолеВвода(5, 2) = TextBoxl4

Set ПолеВвода(6, 2) = TextBoxl5

'

' Проверка того, являются ли введенные в диалоговом окне значения числами

'

For i = 1 То n

If IsNumeric(ПолеВвода(i, 1).Text) = False Then

MsgBox "Ошибка в размере прибыли или инвестиции",

vblnformation, "Расчет инвестиции" ПолеВвода(i, l).SetFocus

Exit Sub

End If

Next i

For i = 1 To n

If IsNumeric(ПолеВвода(i, 2).Text) = False Then

MsgBox "Ошибка в годе", vblnformation, "Расчет инвестиции" ПолеВвода(i, 2).SetFocus Exit Sub End If Next i

If isNumeric(TextBoxS.Text) = False Then

MsgBox "Ошибка в процентной ставке", vblnformation,

"Расчет инвестиции" TextBoxS.SetFocus

Exit Sub

End If

' Ввод в массивы Операции и Годы данных из диалогового окна

'

For i = 1 То n

Операции(i) = CDbl(ПолеВвода(i, l).Text)

Годы(1) = CByte(ПолеВвода(i, 2).Text) Next i

'

' Ввод процентной ставки '

Процент = CDbl(TextBoxS.Text) / 100

' Расчет чистого текущего объема инвестиции

ТекущийОбъем = 0 For i = 1 То п

ТекущийОбъем = ТекущийОбъем + Операции(i) / (1 + Процент) ^ Годы(1)



Next i

' Вывод в диалоговом окне величины чистого текущего объема инвестиций

'

ТекущийОбъем = Format(ТекущийОбъем, "Fixed")

TextBox9.Text = CStr(ТекущийОбъем)

End Sub

Private Sub CommandButton2_Click()

'

' Процедура закрывает диалоговое окно

'

UserForml.Hide End Sub

'

Private Sub SpinButtonl_Change()

'

' Процедура изменения размера диалогового окна

' в зависимости от введенного числа операций

' Вывод числа операций со счетчика в поле ввода

'

TextBoxV.Text = CStr(SpinButtonl.Value)

'

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

n = CInt(TextBox7.Text)

'

' Изменение размера диалогового окна

'

UserForml.Width = 120 + (n - 1) * 50

'

End Sub

'

Private Sub UserForm_Initialize()

'

' Процедура активизации диалогового окна Чистый текущий объем инвестиций

'

' Устанавливается первоначальное значение счетчика

SpinButtonl.Value = 2

' Запрет не программного ввода данных в поля Процентная ставка

' и Чистый текущий объем инвестиций

'

TextBox7.Enabled = False TextBox9.Enabled = False

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

'

CommandButtonl.Default = True

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

'

CommandButton2.Cancel = True

' Установка максимального и минимального

' допустимого значений счетчика, а также текста всплывающей подсказки

With SpinButton1

.Max = 6

.Min = 1

.ControlTipText = "Ввод числа операций"

End With

End Sub


Содержание раздела