Вид рабочего листа после выполнения расчётов

Private Sub CommandButton1_Click()

Dim p As Double

Dim i_нрс As Double

Dim i_кпс As Double

Dim i_шаг As Double

Dim k As Integer

Dim i As Integer

Dim n As Integer

Dim m As Integer

Dim A() As Double

Dim Проценты() As Double

Dim ПроцентыФормат() As Variant

Dim ЭлементыСписка() As Variant

Dim Area As Object

'Проверка: вводятся ли в поля диалогового окна числа

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(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

If IsNumeric(TextBox5.Text) = False Then

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

vbInformation, "Выплаты"

TextBox5.SetFocus

Exit Sub

End If

'Присвоение переменным значений, вводимых в диалоговом окне

p = CDbl(TextBox1.Text)

k = CInt(TextBox2.Text)

i_нпс = CDbl(TextBox3.Text) / 100

i_кпс = CDbl(TextBox4.Text) / 100

i_шаг = CDbl(TextBox5.Text) / 100

'Проверка согласованности ввода значений

If i_кпс < i_нпс Then

MsgBox "Конечная процентная ставка меньше начальной", _

vbExclamation, "График"

TextBox3.SetFocus

Exit Sub

End If

If i_кпс < i_нпс + i_шаг Then

MsgBox "Шаг слишком большой!" & Chr(13) & _

"Табулируется только одно значение.", _

vbExclamation, "График"

TextBox5.SetFocus

Exit Sub

End If

If i_шаг <= 0 Then

MsgBox "Шаг должен быть положительным!", _

vbExclamation, "График"

TextBox5.SetFocus

Exit Sub

End If

'Очистка рабочего листа от результатов предыдущих вычислений

ActiveSheet.Cells.Clear

'

m = (i_кпс - i_нпс) / i_шаг + 1

'Установка границ динамических массивов

ReDim A(1 To m)

ReDim Проценты(1 To m)

ReDim ПроцентыФормат(1 To m)

'

With ActiveSheet

.Range("A:A").ColumnWidth = 17.6

.Range("A1").Value = "Процентная ставка"

.Range("A2").Value = "Размер выплаты"

.Range("A3").Value = "Ссуда"

.Range("A4").Value = "Число выплат"

End With

'

'Форматирование заголовков записей

'

ActiveSheet.Range("A1:A4").Select

With Selection

.HorizontalAlignment = xlGeneral

.VerticalAlignment = xlBottom

.WrapText = False

.Orientation = 30

.ShrinkToFit = False

.MergeCells = False

End With

With Selection.Interior

.ColorIndex = 36

.Pattern = xlSolid

.PatternColorIndex = xlAutomatic

End With

'Вывод данных на рабочем листе

With ActiveSheet

For i = 1 To m

Проценты(i) = i_нпс + i_шаг * (i - 1)

A(i) = Pmt(Проценты(i), k, -p)

A(i) = Format(A(i), "##")

ПроцентыФормат(i) = Format(Проценты(i), "#.0%")

.Cells(1, i + 1).Value = ПроцентыФормат(i)

.Cells(2, i + 1).Value = A(i)

 

Next i

.Range("B3").Value = p

.Range("B4").Value = k

End With

ReDim ЭлементыСписка(1 To m, 0 To 1)

For i = 1 To m

ЭлементыСписка(i, 0) = ПроцентыФормат(i)

ЭлементыСписка(i, 1) = A(i)

Next i

With ListBox1

.Clear

.ColumnCount = 2

.List = ЭлементыСписка()

.ListIndex = 0

End With

If OptionButton1.Value = True Then График xlColumn, 6

If OptionButton2.Value = True Then График xlLine, 10

End Sub

 

Sub График(ТипГрафика As Integer, Формат As Integer)

Dim Area As Object

Dim n As Integer

Set Area = ActiveSheet.Cells(1, 2).CurrentRegion

n = Area.Columns.Count

ActiveSheet.ChartObjects.Add(195, 30, 200, 190).Select

ActiveChart.ChartWizard Source:= _

Range(Cells(1, 2), Cells(2, n)), _

Gallery:=ТипГрафика, Format:=Формат, _

PlotBy:=xlRows, CategoryLabels:=1, _

SeriesLabels:=0, HasLegend:=False, _

Title:="Диаграмма", CategoryTitle:="Справка", _

ValueTitle:="Выплаты", ExtraTitle:=""

End Sub

 

Private Sub CommandButton2_Click()

UserForm1.Hide

End Sub

 

Private Sub CommandButton3_Click()

ActiveSheet.Cells(1, 1).CurrentRegion.Clear

End Sub

 

Private Sub UserForm_Initialize()

OptionButton1.Value = True

With CommandButton1

.Default = True

.ControlTipText = "Вычисления и составление отчёта на рабочем листе"

End With

With CommandButton2

.Cancel = True

.ControlTipText = "Кнопка отмены"

End With

CommandButton3.ControlTipText = "Очистка рабочего листа"

End Sub