Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть 2. Основы офисного программирования.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
4.04 Mб
Скачать

5.2.14. Процедуры-функции

Функция представляет собой последовательность инструкций языка Visual Basic, ограниченных инструкциями Function и End Function. Эти инструкции выполняются при вызове функции. При обращении к функции ей можно передать параметры. Если процедура Function не имеет аргументов, ее заголовок должен содержать пустые скобки за именем функции. Процедура Function возвращает вычисленное при выполнении записанных в ней инструкций значение, следовательно, функцию можно вызвать в выражении, возвращенный из нее результат может быть использован в качестве операнда при вычислении значения выражения. Возврат значения осуществляется путем его присвоения имени функции в одной или нескольких инструкциях процедуры.

Function ИмяФункции (СписокФормальныхПараметров) As Тип

КодФункции

ИмяФункции = Результат

End Function

Название типа, указанное в заголовке, определяет тип результата, возвращаемого функцией. Это указание можно опустить. Перед ключевым словом Function могут быть указаны ключевые слова Public Private, Static. При вызове функции указывается ее имя, используются те же способы передачи параметров, что и при вызове подпрограммы. Инструкция Exit Function позволяет выйти из функции «досрочно», но следует помнить, что предварительно должен быть определен результат.

В следующем примере функция Celsius пересчитывает градусы Фаренгейта в градусы Цельсия. Когда функция вызывается процедурой Main, переменная, содержащая значение аргумента, передается функции. Результат вычислений возвращается вызывающей процедуре и выводится в окно сообщения.

Sub Main()

temp = Application.InputBox(Prompt:= _

“Введите температуру в градусах Фаренгейта.”, _ Type:=1)

MsgBox “Температура равна “ & Celsius(temp) _ & “ градусов Цельсия.”

End Sub

Function Celsius(fDegrees)

Celsius = (fDegrees – 32) * 5 / 9

End Function

Приведенная ниже функция демонстрирует пример рекурсивных вычислений.

Function Factorial (ByVal MyVar As Integer) As Integer

MyVar = MyVar – 1

If MyVar = 0 Then

Factorial = 1

Exit Function

End If

Factorial = Factorial (MyVar) * (MyVar + 1)

End Function

Эту функцию можно вызвать, передав в качестве параметра, например, переменную:

S = 5

Print S ' Выводит на экран 5

Print Factorial(S) ' Выводит на экран 120=5!

Print S ' Выводит на экран 5

Аргумент передается в функцию по значению. Без ключевого слова ByVal в описании функции приведенные выше инструкции Print выводят на экран 5, 1 и 0. Причина заключается в том, что в этом случае аргумент передается по ссылке, т.е. MyVar ссылается на переменную S, которая уменьшается, следовательно, на 1 до тех пор, пока не станет равной 0.

5.2.15. Процедуры-свойства

Процедура Property представляет собой последовательность инструкций языка Visual Basic, которые позволяют программисту создавать собственные свойства объектов и оперировать с ними:

  • Процедуры Property создают допускающие только чтение свойства для форм, стандартных модулей и модулей класса.

  • Процедуры Property следует использовать вместо переменных Public в программе, которая должна выполняться после задания значение свойства.

  • В отличие от переменных Public процедуры Property могут иметь справочные строки, присвоенные им в окне Просмотр объектов.

Когда создается процедура Property, она становится свойством модуля, содержащего эту процедуру. В языке Visual Basic имеются три типа процедур Property:

Процедура Описание

Property Let Присваивает значение свойству

Property Get Возвращает значение свойства

Property Set Задает ссылку на объект

Синтаксис процедуры Property:

Property {Get | Let | Set} ИмяСвойства _

(СписокАргументов) As Тип

КодПроцедуры

End Property

Процедуры Property обычно используются попарно: Property Let с Property Get и Property Set с Property Get. Описание одной процедуры Property Get подобно описанию свойства, доступного только для чтения. Использование всех трех процедур Property вместе полезно только для переменных Variant. В отличие от Property Let процедура Property Set предназначена для работы с объектами.

Более подробно информацию о процедурах-свойствах можно получить из справочного руководства по VBA.