Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование VBA.pdf
Скачиваний:
374
Добавлен:
03.05.2015
Размер:
3.07 Mб
Скачать

105

2.13.2. Функции, определённые пользователем

Функция, определённая пользователем, называемая также процеду- рой-функцией, это особый вид процедуры VBA, возвращающей результат. Пользовательские процедуры-функции, как и встроенные функции VBA, могут иметь необязательные и именованные аргументы. Для записи функции-процедуры нельзя использовать макрорекордер, хотя можно редактировать записанный рекордером макрос и превращать его в функциюпроцедуру.

Основное различие между процедурой-функцией и другими процедурами, помимо того, что функции возвращают значение, а процедуры – нет, состоит в том, что в функции-процедуре используются ключевые слова

Function и End Function.

Формат процедуры-функции:

Function Name([Arglist]) [As Type] VBA Statements

[Name = expression]

End Function

Function – ключевое слово, объявляющее начало функции.

Name – имя функции. Имена функций следуют тем же правилам, что и имена других идентификаторов VBA.

Arglist – список аргументов данной функции, необязательный эле-

мент.

Type – любой тип возвращаемого значения функции. Если тип не определен, результат, который возвращает функция-процедура, имеет тип

Variant.

Name = expression – присваивание функции, которое указывает VBA, какое значение должна возвращать функция, необязательный элемент. Тем не менее, всегда следует включать оператор присваивания в функ- ции-процедуры.

End Function – ключевые слова, заканчивающие функцию.

Даже если функция не имеет аргументов (например, Now, Date) в объявлении функции необходимо использовать круглые скобки.

Обычно функция предназначается для выполнения вычисления и для возвращения результата. При объявлении функции-процедуры указывается имя каждого аргумента, передаваемого функции. Имена аргументов в списке отделяются друг от друга запятой и должны следовать правилам, применяемым к любому идентификатору VBA.

Ниже приведён пример, в котором используется функция, вычисляющая сумму комиссионных. Суть задачи состоит в следующем. В таблице, приведённой ниже, требуется подсчитать суммы комиссионных и оплаты. Суммы комиссионных подсчитываются в процедуре-функции Комиссионные, обращение к которой осуществляется в процедуре Расчёт_Комиссионных при помощи инструкции

Cells(i, 3) = Комиссионные(Cells(i, 2)),

106

параметром которой является сумма продаж, находящаяся в ячейке Excel B3÷B6 (Cells(3, 2) – это ячейка B3 и т.д.).

Sub Расчёт_Комиссионных() Sheets("Лист1").Select

Dim i As Integer i = 3

While Cells(i, 1) <> ""

Cells(i, 3) = Комиссионные(Cells(i, 2)) Cells(i, 4) = Cells(i, 2) + Cells(i, 3)

i = i + 1 Wend

End Sub

Function Комиссионные(Продажи As Double) As Double Dim РасчётКом As Double, Надбавка As Double

РасчётКом = Продажи * 0.05 If Продажи > 5000 Then

Надбавка = 0.01 * (Продажи - 5000) РасчётКом = РасчётКом + Надбавка

End If

If Продажи > 10000 Then

Надбавка = 0.02 * (Продажи - 10000) РасчётКом = РасчётКом + Надбавка

End If