Создание функций пользователя
VBA предоставляет также возможность пользователю создавать собственные функции, работать с которыми на рабочем листе можно при помощи мастера функций точно так же, как и с любой встроенной функцией. Рассмотрим пример.
Задача 2 Расчет стоимости товаров
Для привлечения покупателей книг в Вашем издательстве введена следующая система цен. Если продается от 100 до 200 экземпляров книги, то скидка от ее отпускной цены составляет 7 %, если продается от 201 до 300 экземпляров, то скидка составляет 10 %, а если свыше 300 экземпляров - 15 %. Кроме того, для постоянных клиентов предусмотрена дополнительная скидка в размере 5 %.
Создайте функцию пользователя с именем Стоимость для расчета стоимости партии книг.
Выполнение:
Аргументы этой функции назовем ЦенаОднойКниги, Количество и Скидка. Для аргумента Скидка предусмотрим только два допустимых значения: 1 – для постоянных клиентов и 0 – в противном случае. Построим пользовательскую функцию Стоимость следующим образом.
1 Выполните команду Сервис / Макрос / Редактор Visual Basic, чтобы открыть окно редактора Visual Basic.
2 Выполните команду Вставка / Модуль (Insert / Module) для создания листа модуля.
3 Выберите значок модуля в окне Проект (Project), чтобы активизировать окно редактора кода на листе модуля.
4 Наберите на листе модуля приведенную ниже процедуру.
Function Стоимость(ЦенаОднойКниги, Количество, Скидка)
'
'Вычисление стоимости без учета скидки для постоянных клиентов
'
If Количество < 100 Then
'
'Продажа до 99 экземпляров
'
СтоимостьБезСкидки = ЦенаОднойКниги * Количество
Else
If Количество <= 200 Then
'
'Продажа от 100 до 200 экземпляров
'
СтоимостьБезСкидки = ЦенаОднойКниги * Количество * 0.93
Else
'
' Продажа от 201 до 300 экземпляров
'
If Количество <= 300 Then
СтоимостьБезСкидки = ЦенаОднойКниги * Количество * 0.9
Else
'
' Продажа свыше 300 экземпляров
'
СтоимостьБезСкидки = ЦенаОднойКниги * Количество * 0.85
End If
End If
End If
'
' Корректировка стоимости с учетом скидки для постоянных клиентов
'
If Скидка = 0 Then
Стоимость = СтоимостьБезСкидки
Else
Стоимость = СтоимостьБезСкидки * 0.95
End If
End Function
Таким образом, функция пользователя Стоимость создана. Она включена в категорию функций, определенных пользователем, мастера функций. Возможность применения русскоязычных имен в VBA обеспечивает простоту использования диалогового окна мастера функций для данной функции.
5 Введите в ячейки А1:D2 исходные данные задачи (рис. 5).
6 В ячейку Е2 поставьте знак равенства и
вызовите мастер функций . В открывшемся окне в поле Категория
выберите Определенные пользователем. Ниже в текстовом поле Выберите
функцию найдите Стоимость. Нажмите ОК.
7 Откроется окно новой, определенной нами функции Стоимость. Заполните ее поля значениями (рис. 5). Нажмите ОК.
• Названия всех параметров функции Стоимость в окне мастера функций выводятся также на русском языке. Доступная для понимания структура диалогового окна позволяет использовать функцию Стоимость любому пользователю, даже не владеющему VBA. Для ее применения достаточно знать только имя этой функции.
8 Измените значения в ячейках В2:D2 и посмотрите, как изменилась стоимость. Проверьте, соответствует ли ее величина условию задачи для трех различных вариантов значений количества проданных книг (от 100 до 200, от 201 до 300, свыше 300 экземпляров).
Рис. 5. Диалоговое окно для заполнения параметров функции Стоимость
Задание:
1) Постройте пользовательскую функцию ОтпускнаяЦена, которая вычисляет стоимость покупки следующим образом. Если куплено товаров на сумму больше 500 р. или количество наименований товаров превышает 7 единиц, то назначается 10 %-ная скидка.
2) Запишите макрос, с помощью которого автоматически будет строиться поверхность и исходные данные для нее (ряд значений х и у), а формулу поверхности будет вводить пользователь.
© ООО «Знанио»
С вами с 2009 года.