сПНЙ 4

рЕЛЮ: пЮЯВЕР ЮЛНПРХГЮЖХХ

жЕКЭ урока

В уроке разрабатывается приложение, решающее задачу расчета амортизации в зависимости от выбранного метода: стандартного или А;-кратного учета амортизации. На примере данного приложения вы узнаете, что такое:

Теория

Под амортизацией подразумевается уменьшение стоимости имущества в процессе эксплуатации. Обычно оценивают величину этого уменьшения на единицу времени.

Функция рабочего листа 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

  1. Активизирует диалоговое окно.
  2. Запрещает ввод данных пользователем в поле Кратность метода.
  3. Назначает клавише <Esc> функцию кнопки Отмена, а клавише <Enter> -- Вычислить.
  4. Назначает кнопке вычислить сочетание клавиш <Alt>+<B>, а кнопке Отмена ≈ <Alt>+<O>.
  5. В группе тип амортизации при инициализации диалогового окна назначает выбор переключателя Стандартный метод. За счет выбора этого переключателя при инициализации диалогового окна не отображаются надпись кратность метода и соответствующие ей поле и счетчик (рис. У4.2).
  6. Устанавливает для счетчика минимальное значение, равное 2, и шаг изменения значений счетчика, также равный 2, для убыстрения прокрутки ; счетчика. Промежуточные значения вводятся в i поле Кратность метода не с помощью счетчика, i а посредством клавиатуры.

 

Рис. У4.2. Диалоговое окно Расчет амортизации при выбранном переключателе Метод k кратного учета

SpinButton1_ Change

Изменяет значение счетчика, которое вводится в i поле Кратность метода .

OptionButton2_Click

Отображает в диалоговом окне надпись кратность ; метода и соответствующие ей поле и счетчик.

OptionButton2_Click

Скрывает в диалоговом окне надпись кратность метода и соответствующие ей поле и счетчик.

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

CoramandButton1_Click

  1. Проверяет согласованность вводимых данных. В случае их несогласованности отображает соответствующее сообщение (рис. У4.3, а и У4.3, б).
  2. Используя финансовую функцию рабочего листа SYD (АМГД) и DDB (ДДОБ) вычисляет величину амортизации выбранным методом.
  3. Удаляет с рабочего листа все ранее созданные графические объекты и внедряет объект WordArt. Подготавливает рабочий лист для вывода результатов вычислений. Выводит полученные данные на рабочий лист и в диалоговое окно (рис. У 4. 4).


 

а)

б)

Рис. У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 по следующему алгоритму:

  1. Нажмите кнопку Добавить объект WordArt (Insert WordArt) панели инструментов Рисование (Drawing).
  2. В появившемся окне Коллекция WordArt (WordArt Gallery) выберите нужный стиль надписи. Нажмите кнопку ОК.
  3. В появившемся окне Изменение текста WordArt (Edit WordArt Text) установите шрифт и размер отображаемого текста, а также в поле Текст (Text) введите текст, который будет отображаться, например Амортизация . Нажмите кнопку ОК.
  4. На рабочем листе появится внедренный объект WordArt. Выберите и перенесите его в требуемое место на этом листе.
  5. Для того чтобы разобраться, как происходит программное удаление объекта WordArt с рабочего листа, выделите его и удалите с помощью клавиши <Delete>.

Перечисленные выше действия будут переведены 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. Диалоговое окно Значение или график при выборе переключателя График