Составители:
Рубрика:
68
При создании определений функций в языке VBA программисту
предоставляют возможность передавать значения через список формальных
параметров двумя способами: по значению ByVal и по ссылке ByRef.
Первый способ (по значению) является основным и выбирается исходя из
соображений повышения надежности создаваемой программы. Если он
используется, то вызываемая функция работает только с копией значения,
находящегося в фактической ячейке вызывающей программы в момент вызова
функции и не может изменить его. Поэтому в этом случае используется
механизм односторонней передачи данных от вызывающей функции к
вызываемой.
Второй способ (по ссылке) отличается тем, что вызываемая функция
получает в свое распоряжение не копию данных, а адрес ячейки памяти, в
которой
эти данные находятся. Как следствие, у вызываемой функции
появляется возможность изменить содержимое ячеек вызывающей программы
и ее можно использовать для возврата результатов вычислений.
Пример 2.29. Рассмотрим функцию
Private Function Расчет_Зарплаты(ByVal Начислено As Currency, _
ByVal Ставка_налога As Double, _
ByRef Подоходный_налог As Currency) As Currency
'Формальный параметр Подоходный_налог также используется
'для возврата результатов в вычислений в вызывающую программу.
Подоходный_налог = Начислено * Ставка_налога
Расчет_Зарплаты = Начислено - Подоходный_налог
End Function
Совпадающее с именем возвращаемое значение этой функции Расчет_Зарплаты
определяется как разница между начисленной суммой и исчисленным
подоходным налогом и есть ничто иное, как сумма к выдаче. Часть формальных
параметров функции передается с ключом ByVal и используется только для
задания значений аргументов функции. Параметр Подоходный_налог передается
по ссылке с ключом ByRef. Ранее хранившееся в нем значение функцией никак не
используется, зато в
процессе выполнения функции в него записывается новое
число, которое позднее может быть получено вызывающей программой.
Пример 2.30. Вызов рассматриваемой функции:
'Расчет суммы к выдаче
Ведомость(j).К_выдаче_Ведомость =
Расчет_Зарплаты(Ведомость(j).Начислено_Ведомость, 0.12, _
Ведомость(j).Налог_Ведомость)
После завершения работы функции ячейка Ведомость(j).К_выдаче_Ведомость
содержит результаты расчета суммы к
выдаче, а в ячейке
Ведомость(j).Налог_Ведомость находятся результаты расчета величины
подоходного налога. Обратите внимание на то, что любая попытка записать в
теле функции новое значение, например, в ячейку Начислено не приведет к
изменению числа в ячейке памяти Ведомость(j).Начислено_Ведомость вызывающей
программы.
Как уже было ранее указано, процедура не возвращает значения в точку
вызова и представляет собой функцию, которая вызывается по имени, а не
через оператор присваивания. Если требуется использовать результаты работы
процедуры в вызывающей программе, то их можно получить через список
формальных параметров используя ключ ByRef также, как это было
рассмотрено для
функции. Формально процедура может быть описана как:
[Private или Public] [Static] Sub Имя [(СписокАргументов)]
[Операторы]
Страницы
- « первая
- ‹ предыдущая
- …
- 66
- 67
- 68
- 69
- 70
- …
- следующая ›
- последняя »
