В уроке разрабатывается
приложение, решающее задачу расчета амортизации в зависимости от выбранного
метода: стандартного или А;-кратного учета амортизации. На примере данного приложения
вы узнаете, что такое:
Под амортизацией
подразумевается уменьшение стоимости имущества в процессе эксплуатации. Обычно
оценивают величину этого уменьшения на единицу времени.
Функция рабочего
листа AMP (SLN) возвращает величину амортизации имущества за один период времени,
используя метод равномерной амортизации.
Синтаксис:
АМР(стоимость;
остаток; время_эксплуатации)
Аргументы:
стоимость |
Начальная
стоимость имущества |
||
остаток |
Остаточная стоимость
в конце периода амортизации (иногда называется ликвидной стоимостью
имущества) |
||
время_эксплуатации |
Количество периодов,
за которые собственность амортизируется (иногда называется периодом
амортизации) |
||
Предположим,
вы купили за 6 000 руб. компьютер, который после 5 лет эксплуатации будет оцениваться
в 1 000 руб. Снижение стоимости для каждого года эксплуатации вычисляется формулой
=дмр(6000; 1000; 5), которая определяет 1 000р.
Функция АМГД
(SYD) возвращает годовую амортизацию имущества для указанного периода.
Синтаксис:
АМГД(стоимость; остаток; время_эксплуатации; период)
Аргументы:
стоимость |
Начальная стоимость
имущества |
||
остаток |
Остаточная стоимость
в конце периода амортизации (иногда называется ликвидной стоимо- :
стью имущества) |
||
время эксплуатации |
Количество периодов,
за которые собственность амортизируется (иногда называется периодом
амортизации) |
||
период |
Номер периода
для вычисления амортизации (должен измеряться в тех же единицах, что
и время полной амортизации) |
||
При расчете
предыдущего примера получим, что за первый год эксплуатации компьютера амортизация
вычисляется формулой =АМГД(6000;1000;5,-1), которая возвращает значение1 666.67р.,
а за последний — формулой =АМГД(6000;1000;5;5), которая возвращает значение
333.33р.
Функция ДОБ
(DB) возвращает амортизацию имущества на заданный период, используя метод постоянного
учета амортизации.
Синтаксис:
ДОБ(стоимость;
остаток; время_эксплуатации; период; месяц)
Аргументы:
стоимость |
Начальная
стоимость имущества |
||
остаток |
Остаточная стоимость
в конце периода амортизации (иногда называется ликвидной стоимостью
имущества) |
||
время эксплуатации |
Количество периодов,
за которые собственность амортизируется (иногда называется периодом
амортизации) |
||
период |
Номер периода
для вычисления амортизации (должен измеряться в тех же единицах, что
и время полной амортизации) |
||
месяц |
Количество месяцев
в первом году. Если аргумент месяц опущен, то предполагается
число 12 |
||
Метод постоянного
учета амортизации вычисляет амортизацию, используя фиксированную процентную
ставку.
При расчете
предыдущего примера получим амортизацию за время эксплуатации компьютера:
=ДОБ(6000;1000;5;
1) возвращает значение 1806.00р.
=ДОБ(6000;1000;5;2)
возвращает значение 1262.39р.
=ДОБ(6000;1000;5;3) возвращает значение 882.41р.
=ДОБ(6000;1000;5,-4) возвращает значение 616.81р.
=ДОБ(6000; 1000;5;5)
возвращает значение 431.15р.
Функция ДДОБ
(DDB) возвращает величину амортизации имущества для указанного периода, используя
метод двукратного (или к- кратного) учета амортизации.
Синтаксис:
ДДОБ(стоимость; остаток; время_эксплуатации; период; коэффициент)
Аргументы:
Стоимость |
Начальная стоимость
имущества |
||
остаток |
Остаточная стоимость
в конце периода амортизации (иногда называется ликвидной стоимостью
имущества) |
||
время эксплуатации |
Количество периодов,
за которые собственность амортизируется (иногда называется периодом
амортизации) |
||
период |
Номер периода
для вычисления амортизации (должен измеряться в тех же единицах, что
и время полной амортизации) |
||
коэффициент |
Норма снижения
балансовой стоимости (амортизации). Если коэффициент опущен, то предполагается,
что он равен 2 (метод двукратного учета амортизации) |
||
Метод двукратного
учета амортизации предполагает ускоренную амортизацию имущества. При этом амортизация
является максимальной в первый период и снижается в последующие периоды.
В примере
с компьютером по методу двукратной амортизации она составит:
=ДДОБ(6000;юоо;5,-1)
возвращает значение 2400.00р.
=ДДОБ{6000;
1000;5;2) возвращает значение 1440. 00р.
=ДДОБ (босо,-1000,-5; 3) возвращает значение 864.00р.
=ДДОБ(6000;1000;5; 4 г возвращает значение 296. 00р.
=ДДОБ (6000,-
1000;5,- 5) возвращает значение 0. 00р.
В следующем
разделе рассматривается разработка приложения, в котором по начальной и остаточной
стоимостям оборудования, сроку амортизации и расчетному периоду амортизации
при выбранном методе расчета находится величина амортизации. Кроме того, в диалоговом
окне, с помощью которого происходит управление работой приложения, используя
свойство visible осуществляется управление видимостью поля, счетчика и надписи.
Изменение свойства Visible происходит при выборе метода амортизации. Для придания
большей презентабельности отчету об амортизации на рабочий лист внедряется объект
WordArt при помощи метода AddTextEffeet семейства Shapes.
Для решения
задачи нахождения вычисления амортизации оборудования по стандартному методу
или методу к-кратного учета с помощью редактора пользовательских форм
создадим диалоговое окно Расчет амортизации (рис. У4.1).
Рис.
У4.1. Диалоговое окно Расчет амортизации
Обсудим,
как приведенная ниже программа решает перечисленные задачи и что происходит
в программе.
UserForm Initialize |
|
||
Рис.
У4.2. Диалоговое окно Расчет амортизации при выбранном переключателе
Метод k кратного учета
SpinButton1_
Change |
Изменяет значение
счетчика, которое вводится в i поле Кратность метода . |
||
OptionButton2_Click |
Отображает в
диалоговом окне надпись кратность ; метода и соответствующие ей поле
и счетчик. |
||
OptionButton2_Click |
Скрывает в диалоговом
окне надпись кратность метода и соответствующие ей поле и счетчик. |
||
Нажатие кнопки
вычислить запускает на выполнение процедуру CoramandButton1_Click |
|
||
а)
б)
Рис.
У4.3. Сообщения о несогласованности вводимых данных
Рис.
У4.4. Отчет, выводимый на рабочем листе программой расчета амортизации
Нажатие кнопки
отмена запускает на выполнение процедуру CommandButton2_Click |
Закрывает диалоговое
окно. |
||
Private Sub
CommandButtonl_Click()
' Процедура расчета амортизации
'
Dim В As Double
Dim E As Double
Dim A As Double
Dim Ye As Integer
Dim Yc As Integer
Dim k As Integer
Dim Flag As Boolean
'
' В - первоначальная
стоимость оборудования, для которого
' подсчитывается
амортизация
' Е - остаточная
стоимость оборудования
' Ye - время
полной „амортизации
' Yc - период,
для которого рассчитывается амортизация
' Flag - логическая
переменная, равная True, если амортизация
' рассчитывается
стандартным методом, и False, если методом
' k-кратного
учета
Dim n As Integer
Dim j As Integer
' n, j - вспомогательные
переменные, используемые для удаления
' ранее созданных графических объектов
'
' Считывание
в переменные из диалогового окна значений параметров
В = CDbl(TextBoxl.Text)
Е = CDbl(TextBox2.Text)
Ye = CInt(TextBox3.Text)
Yc = CInt(TextBox4.Text)
' Проверка согласованности вводимых данных
'
If В < Е
Then
MsgBox "Остаток
больше начальной стоимости", vbExclamation, "Амортизация"
TextBoxl.SetFocus
Exit Sub
End If
If Ye < Yc
Then
MsgBox "Ошибка
в сроке амортизации", vbExclamation, "Амортизация"
TextBox3.SetFocus
Exit Sub
End If
'
' Определение
выбранного переключателя:
' если Стандартный,
то переменной Flag присваивается True;
' если k-кратного
учета, то переменной Flag присваивается False
'
If OptionButtonl.Value
= True Then
Flag = True
Else
Flag = False
End If
' Расчет амортизации в зависимости от выбранного метода
'
If Flag = True
Then
'
' Стандартным
методом
A = Application.SYD(В,
Е, Ye, Yc)
Else
' Методом k-кратного учета
'
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
End If
TextBoxS.Text = CStr(A)
'
' Подготовка рабочего листа для ввода данных
'
'
' Определения общего числа объектов Shape на рабочем листе
'
n = ActiveSheet.Shapes.Count
'
' Удаление с
рабочего листа всех ранее созданных объектов Shape
'
If n >= 1
Then
For j = 1 To
n
ActiveSheet.Shapes(j ).Select Selection.Delete
Next j
End If
'
' Создание объекта WordArt
'
ActiveSheet.Shapes.AddTextEffeet(msoTextEffect14,
"Амортизация",
"Impact", 18#, msoTrue, msoFalse, 166.5, 105#).Select
'
' Сдвиг объекта WordArt
'
Selection.ShapeRange.IncrementLeft
111# Selection.ShapeRange.IncrementTop -100.5
' Изменение ширины столбцов А и В и установка в
' них режима
ввода текста с переносом
ActiveSheet.Columns("A").Select
With Selection
.ColuranWidth
= 30
.WrapText = True
End With
ActiveSheet.Columns("B")
.Select With
Selection
.ColumnWidth
= 20 .WrapText = True
End With
' Снятие выделения со столбца В выбором одной ячейки
'
ActiveSheet.Range("Bl").Select
' Ввод заголовков полей на рабочем листе
'
With ActiveSheet
.Range (."Al")
.Value = "Начальная стоимость"
.Range("A2").Value
= "Остаточная стоимость"
.Range("A3").Value
= "Время полной амортизации"
.Range("A4").Value
= "Период, для которого рассчитывается амортизация"
.Range("A5").Value
= "Расчет выполнен"
.Range("A6").Value = "Величина амортизации"
End With
'
'
' Ввод данных в ячейки рабочего листа
'
With ActiveSheet
.RangeC"B1").Value
= В
.Range("B2").Value
= Е
.Range("ВЗ").Value
= Ye
.Range("B4").Value
= Yc
.Range("B6").Value
= A
.Range("B5").WrapText
= True
If Flag = True
Then
.Range("B5").Value = "стандартным методом"
Else
.Range("B5").Value
= "методом " & CStr(k) &
" кратного учета амортизации"
End If
End With
End Sub
'
Private Sub CommandButton2_Click ()
'
' Процедура закрытия диалогового окна
'
UserForml.Hide
End Sub
Private Sub OptionButtonl__Click()
'
' Процедура
скрывает название, поле и счетчик для ввода
' кратности амортизации
'
Label6.Visible = False
TextBox6.Visible = False
SpinButtonl.Visible
= False
End Sub
Private Sub OptionButton2_Click()
'
' Процедура делает видимыми название, поле для ввода
' кратности
амортизации и счетчик
Label6.Visible = True
TextBox6.Visible = True
SpinButtonl.Visible = True
End Sub
Private Sub
SpinButtonl_Change()
' Процедура вводит значение счетчика в поле ввода
'
TextBox6.Text = CStr(SpinButtonl.Value)
End Sub
Private Sub UserFormJEnitialize()
'
' Процедура активизирует диалоговое окно Расчет амортизации
'
' При инициализации
окна выбран первый переключатель
OptionButtonl.Value = True
'
' Первоначально
название, поле и счетчик для ввода
' кратности
амортизации не отображаются в диалоговом окне i
TextBoxS.Enabled = False
TextBox6.Visible = False
Label6.Visible
= False
SpinButtonl.Visible = False
'
' Минимальное
значение и шаг,
' с которым изменяются значения счетчика
'
With SpinButtonl
.Min = 2 .SmallChange = 2
End With
'
' Функция кнопки Отмена выполняется по умолчанию
'
CommandButton2.Default = True
'
' Нажатие .клавиши
<Esc> эквивалентно нажатию кнопки Отмена
CommandButton2.Cancel = True
'
' Функция кнопки
Вычислить выполняется по нажатию клавиш <Alt>+<D>
' или на русской клавиатуре <Alt>+<B>
'
CommandButtonl.Accelerator
= "D" '
' Функция кнопки Отмена выполняется по нажатию клавиш <Alt>+<J>
' или на русской
клавиатуре <Alt>+<0>
CommandButton2.Accelerator
= "J"
UserForml.Show
'
End Sub
При написании
программ с внедренными графическими объектами лучше всего воспользоваться средством
MacroRecorder.
Итак, для
активизации MacroRecorder выберите команду Сервис, Макрос, Начать запись
(Tools, Macro, Record New Macro) и запустите MacroRecorder на запись. После
задания всех параметров в появившемся диалоговом окне Запись макроса (Record
Macro) и нажатия кнопки ОК появится плавающая панель инструментов с кнопкой
Остановить запись (Stop Recording). Теперь все производимые действия
будут записываться до тех пор, пока не будет нажата эта кнопка. Выполните построение
объекта WordArt по следующему алгоритму:
Перечисленные
выше действия будут переведены MacroRecorder в следующий макрос.
Sub Макрос1()
' Макрос1 Макрос
' Макрос записан
26.04.99 (Андрей)
'
ActiveSheet.Shapes.AddTextEffeet(msoTextEffect!4,
"Амортизация",
"Impact",
18#, msoTrue, msoFalse, 166.5, 105#).Select
Selection.ShapeRange.IncrementLeft lilt
Selection.ShapeRange.IncrementTop
-100.5
ActiveSheet.Shapes("WordArt 1").Select
Selection.Delete
End Sub
Первые три
инструкции этого макроса предназначены для создания объекта wordArt. Их просто
надо скопировать в то место программы расчета амортизации, где создается этот
объект. Две последние инструкции связаны с удалением объектов wordArt с рабочего
листа. Подсказка со стороны MacroRecorder очень полезна, т. к. у объекта wordArt
нет метода Delete. Удаляемый объект необходимо выбрать, что приведет к образованию
объекта selection. Удалять надо не непосредственно объект wordArt, а полученный
указанным способом объект Selection. Эта идея как раз и реализована в данном
приложении.
Разработать
приложение, с помощью которого можно:
Рис.
У4.5. Диалоговое окно Значение или график при выборе переключателя
Значение
Операция,
выполняемая над функцией, должна устанавливаться выбором
Переключателя
из группы Операция диалогового окна Значение или график.
При выборе
переключателя Значение в диалоговом окне должны отображаться только элементы
управления, относящиеся к нахождению функции при вводимом значении аргумента
(рис. У4.5), а при выборе переключателя график - относящиеся к табуляции функции
и построению ее графика (рис. У4.6).
Рис. У4.6. Диалоговое окно Значение или график при выборе переключателя График