
Задание II.
В данном задании рассмотрим пример оформления расчета амортизации двумя методами с использованием диалогового окна. Выбор методов амортизации производится с помощью переключателя. В случае использование k-кратного учета амортизации дополнительно вводится значение k..
А
налогично первому заданию, присвойте имя рабочему листу Амортизация, введите основные заголовки.
В
редакторе VB добавьте вторую форму Userform2 и разместите элементы управления как показано на рисунке:
Надпись Кратность метода, сопровождающее текстовое поле и счетчик при отображении формы не должны отображаться. Появлением и исчезновением в диалоговом окне элементов управления управляет свойство Visible. Это свойство возвращает true, если графический объект видим, и false – в противном случае.
Еще на этапе проектирования свойству Visible этих объектов присвойте значение false. Все остальное возьмет на себя процедура обработки.
Все расчеты и заполнения будут выполнять процедуры. Для кнопки Очистить:
Private Sub CommandButton1_Click()
Dim i As Integer
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
Worksheets("Амортизация").Range("D1:D6").Clear
End Sub
4. Для кнопки Вычислить:
Private Sub CommandButton2_Click()
Dim B, E, A As Double
Dim Ye, Yc, k As Integer
Dim Flag As Boolean
B = CDbl(TextBox1.Text)
E = CDbl(TextBox2.Text)
Ye = CInt(TextBox3.Text)
Yc = CInt(TextBox4.Text)
SpinButton1.Min = 2
If B < E Then
MsgBox "Остаток больше начальной стоимости", vbExclamation, "Амортизация"
Exit Sub
End If
If Ye < Yc Then
MsgBox "Ошибка в сроке амортизации", vbExclamation, "Амортизация"
Exit Sub
End If
If OptionButton1.Value = True Then
Flag = True
Else
Flag = False
End If
If Flag = True Then
A = Application.SYD(B, E, Ye, Yc)
Else
k = CInt(TextBox6.Text)
A = Application.DDB(B, E, Ye, Yc, k)
End If
If A >= 0.01 Then A = Format(A, "Fixed") Else A = 0
TextBox5.Text = CStr(A)
With Worksheets("Амортизация")
.Range("D1").Value = B
.Range("D2").Value = E
.Range("D3").Value = Ye
.Range("D4").Value = Yc
.Range("D6").Value = A
If Flag = True Then
.Range("D5").Value = "стандартным методом"
Else
.Range("D5").Value = "методом " & CStr(k) & " кратного учета амортизации"
End If
End With
End Sub
Для кнопки Отменить:
Private Sub CommandButton3_Click()
UserForm2.Hide
Unload Me
End Sub
Соответственно, для 1 и 2 переключателей в рамке и для счетчика:
Private Sub OptionButton1_Click()
Label6.Visible = False
TextBox6.Visible = False
SpinButton1.Visible = False
End Sub
Private Sub OptionButton2_Click()
Label6.Visible = True
TextBox6.Visible = True
SpinButton1.Visible = True
SpinButton1.Min = 2
End Sub
Private Sub SpinButton1_Change()
With ActiveDialog
TextBox6.Text = CStr(SpinButton1.Value)
End With
End Sub
6. Добавьте в редакторе VB лист модуля и введите следующий код для вызова сформированного окна диалога:
Sub Amort()
UserForm2.Show
End Sub
7. На рабочем листе Амортизация, используя панель инструментов Формы, сформировать кнопку с именем Расчет амортизации и назначить ей макрос Amort.
Протестируйте работу программы и результат выполнения продемонстрируйте преподавателю.