На этом шаге мы рассмотрим основные моменты создания указанного приложения.
Для решения задачи нахождения текущего объема вклада и нахождения маргинальной процентной ставки с помощью редактора пользовательских форм создадим диалоговое окно Маргинальная процентная ставка (рисунок 1).
Рис.1. Диалоговое окно Маргинальная процентная ставка
Обсудим, как приведенная ниже программа решает перечисленные выше задачи и что происходит в программе.
Рис.2. Сообщение о некорректном вводе данных
Рис.3. Отчет, выводимый на рабочем листе программой расчета маргинальной процентной ставки
Приведем текст приложения.
Private Sub CommandButton1_Click() ' Процедура расчета маргинальной процентной ставки Dim i As Double Dim p As Double Dim A As Double Dim iMarg As Double Dim pPure As Double Dim n As Integer ' n - число выплат ' p - размер ссуды ' A - размер одной выплаты ' i - процентная ставка ' pPure - текущий объем ссуды, ' на рабочем листе вычисляется функцией ПЗ ' iMarg - маргинальная процентная ставка ' Проверка того, чтобы введенные ' в диалоговое окно данные являются числами If IsNumeric(TextBox1.Text) = False Then MsgBox "Ошибка в числе выплат", _ vbInformation, "Маргинальная ставка" TextBox1.SetFocus Exit Sub End If If IsNumeric(TextBox2.Text) = False Then MsgBox "Ошибка в размере ссуды", _ vbInformation, "Маргинальная ставка" TextBox2.SetFocus Exit Sub End If If IsNumeric(UserForm1.TextBox3.Text) = False Then MsgBox "Ошибка в размере одной выплаты", _ vbInformation, "Маргинальная ставка" TextBox3.SetFocus Exit Sub End If If IsNumeric(TextBox4.Text) = False Then MsgBox "Ошибка в процентной ставке", _ vbInformation, "Маргинальная ставка" TextBox4.SetFocus Exit Sub End If ' Ввод данных в переменные из диалогового окна n = CInt(TextBox1.Text) p = CDbl(TextBox2.Text) A = CInt(TextBox3.Text) i = CInt(TextBox4.Text) / 100 ' Проверка согласованности ввода данных If n * А < р Then MsgBox "Возвращается на " & CStr(Format(р - n * A, "Fixed")) _ & " меньше размера ссуды", vbExclamation, "Маргинальная ставка" TextBox1.SetFocus Exit Sub End If ' Изменение ширины столбцов и задание режима ввода ' текста с переносом ActiveSheet.Columns("A:A").Select With Selection .ColumnWidth = 20 .WrapText = True End With ActiveSheet.Columns("B:B").Select Selection.ColumnWidth = 12 ' Выбор ячейки В2 для того, чтобы снять выделение со столбца В ActiveSheet.Range("B2").Select ' Ввод названий записей на рабочем листе With ActiveSheet .Range("A2").Value = "Число выплат" .Range("A3").Value = "Размер ссуды" .Range("A4").Value = "Размер одной выплаты" .Range("A5").Value = "Процентная ставка" .Range("A6").Value = "Текущий объем ссуды" .Range("A7").Value = "Маргинальная процентная ставка" .Range("A8").Value = "Маргинальный чистый текущий объем ссуды" .Range("B8").Activate End With ' Расчет чистого текущего объема ссуды pPure = Application.PV(i, n, -A) ' Нахождение маргинальной процентной ставки ' с помощью команды Подбор параметра. ' Ввод данных в ячейки активного рабочего листа ' и задание процентного и денежного форматов в ячейках With ActiveSheet .Range("B2").Value = n .Range("B3").NumberFormat = "#,##0$" .Range("B3").Value = p .Range("B4").NumberFormat = "#,##0$" .Range("B4").Value = A .Range("B5").NumberFormat = "0.00%" .Range("B5").Value = i .Range("B7").NumberFormat = "0.00%" ' Ввод начального приближения для маргинальной процентной ставки .Range("B7").Value = i ' Ввод формулы расчета .Range("B8").FormulaLocal = "=ПС(B7;B2;-B4)" .Range("B6").Value = .Range("B8").Value ' Выполнение команды Подбор параметра .Range("B8").GoalSeek Goal:=p, ChangingCell:=.Range("B7") ' Присвоение найденного значения маргинальной процентной ставки ' переменной iMarg iMarg = .Range("B7").Value End With ' Переформатирование найденных значений ' и вывод их в диалоговом окне TextBox5.Text = CStr(Format(pPure, "Fixed")) TextBox6.Text = CStr(Format(iMarg * 100, "Fixed")) End Sub Private Sub CommandButton2_Click() ' Процедура закрытия диалогового окна UserForm1.Hide End Sub Private Sub UserForm_Initialize() ' Процедура вызова диалогового окна. ' Поля ' Чистый текущий объем ссуды ' и Маргинальная процентная ставка ' доступны для вывода информации, но не для ее ввода TextBox5.Enabled = False TextBox6.Enabled = False ' Клавише <Enter> назначена функция кнопки Вычислить ' Кнопке Вычислить назначен текст всплывающей подсказки With CommandButton1 .Default = True .ControlTipText = "Расчет и составление отчета на рабочем листе" End With ' Клавише <Esc> назначена функция кнопки Отмена ' Кнопке Отмена назначен текст всплывающей подсказки With CommandButton2 .Cancel = True .ControlTipText = "Кнопка отмены" End With UserForm1.Show End Sub
На следующем шаге мы закончим изучение этого вопроса.