Самоучитель VBA

         

Цель урока



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

Финансовые функции расчета амортизации

Управление видимостью отдельных элементов управления в окне диалога

Программный вывод объектов WordArt на рабочий лист



Практика



Для решения задачи нахождения вычисления амортизации оборудования по стандартному методу или методу к-кратного учета с помощью редактора пользовательских форм создадим диалоговое окно Расчет амортизации (рис. У4.1).

Рис. У4.1. Диалоговое окно Расчет амортизации

Обсудим, как приведенная ниже программа решает перечисленные задачи и что происходит в программе.



UserForm Initialize

Активизирует диалоговое окно.

Запрещает ввод данных пользователем в поле Кратность метода.

Назначает клавише <Esc> функцию кнопки Отмена, а клавише <Enter> -- Вычислить.

Назначает кнопке вычислить сочетание клавиш <Alt>+<B>, а кнопке Отмена — <Alt>+<O>.

В группе тип амортизации при инициализации диалогового окна назначает выбор переключателя Стандартный метод. За счет выбора этого переключателя при инициализации диалогового окна не отображаются надпись кратность метода и соответствующие ей поле и счетчик (рис. У4.2).

Устанавливает для счетчика минимальное значение, равное 2, и шаг изменения значений счетчика, также равный 2, для убыстрения прокрутки ; счетчика. Промежуточные значения вводятся в i поле Кратность метода не с помощью счетчика, i а посредством клавиатуры.

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

SpinButton1_ Change

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

OptionButton2_Click

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

OptionButton2_Click

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

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

CoramandButton1_Click

Проверяет согласованность вводимых данных. В случае их несогласованности отображает соответствующее сообщение (рис. У4.3, а и У4.3, б).

Используя финансовую функцию рабочего листа SYD (АМГД) и DDB (ДДОБ) вычисляет величину амортизации выбранным методом.

Удаляет с рабочего листа все ранее созданные графические объекты и внедряет объект 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 по следующему алгоритму:

Нажмите кнопку Добавить объект WordArt (Insert WordArt) панели инструментов Рисование (Drawing).

В появившемся окне Коллекция WordArt (WordArt Gallery) выберите нужный стиль надписи. Нажмите кнопку ОК.

В появившемся окне Изменение текста WordArt (Edit WordArt Text) установите шрифт и размер отображаемого текста, а также в поле Текст (Text) введите текст, который будет отображаться, например Амортизация . Нажмите кнопку ОК.

На рабочем листе появится внедренный объект WordArt. Выберите и перенесите его в требуемое место на этом листе.

Для того чтобы разобраться, как происходит программное удаление объекта 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. ТЕМА: РАСЧЕТ АМОРТИЗАЦИИ

ЦЕЛЬ УРОКА

ТЕОРИЯ

ПРАКТИКА

САМОСТОЯТЕЛЬНОЕ ЗАДАНИЕ

Урок 4

Тема: Расчет амортизации



Самостоятельное задание



Разработать приложение, с помощью которого можно:

Либо вычислить значение заданной функции, скажем у(х) = Sin(x) / (1 + х2), при вводимом значении аргумента и вывести найденное значение в поле диалогового окна.

Рис. У4.5. Диалоговое окно Значение или график при выборе переключателя Значение

Либо протабулировать значения этой функции на заданном интервале с заданным шагом, вывести результат табуляции в список и построить график на рабочем листе.

Операция, выполняемая над функцией, должна устанавливаться выбором

Переключателя из группы Операция диалогового окна Значение или график.

При выборе переключателя Значение в диалоговом окне должны отображаться только элементы управления, относящиеся к нахождению функции при вводимом значении аргумента (рис. У4.5), а при выборе переключателя график - относящиеся к табуляции функции и построению ее графика (рис. У4.6).

Рис. У4.6. Диалоговое окно Значение или график при выборе переключателя График



Теория



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

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