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

       

Создание функций пользователя



VBA предоставляет также возможность пользователю создавать собственные функции, работать с которыми на рабочем листе можно при помощи мастера функций точно так же, как и с любой встроенной функцией. Рассмотрим один пример построения функции пользователя. На минуту представьте себе, что вы менеджер издательства по оптовой продаже книг. Для привлечения покупателей в вашем издательстве введена прогрессивная шкала цен. Если продается от 100 до 200 экземпляров книги, то скидка от ее отпускной цены составляет 7%, если продается от 201 до 300 экземпляров, то скидка составляет 10%, а если свыше 300 экземпляров — 15%. Кроме того, для постоянных клиентов предусмотрена дополнительная скидка в размере 5%. Создадим функцию пользователя с именем стоимость для расчета стоимости Партиикниг. Аргументы этой функции назовем ЦенаОднойКниги, Количество и Скидка. Для аргумента Скидка предусмотрим только два допустимых значения: 1 для постоянных клиентов и 0 в противном случае. Построим пользовательскую функцию стоимость следующим образом:

  • Выполните команду Сервис, Макрос, Редактор Visual Basic (Tools, Macro, Visual Basic Editor), чтобы открыть окно редактора Visual Basic.

  • Выполните команду Вставка, Модуль (Insert, Module) для создания листа модуля.

  • Выберите значок модуля в окне Проект (Project), чтобы активизировать окно редактора кода на листе модуля.

  • Наберите на листе модуля приведенную ниже процедуру.

    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). Названия всех параметров функции стоимость в окне мастера функций выводятся также на русском языке. Доступная для понимания структура диалогового окна позволяет использовать функцию стоимость любому пользователю, даже не владеющему VBA. Для ее применения достаточно знать только имя этой функции.



    Рис. В.5. Диалоговое окно для заполнения параметров функции Стоимость


    Содержание раздела