Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 2....doc
Скачиваний:
79
Добавлен:
17.12.2018
Размер:
1.62 Mб
Скачать

Функции с побочным эффектом

В классическом варианте все аргументы функции являются входными параметрами, и единственный результат вычисления функции - это ее возвращаемое значение., примером является функция Cube. Чаще всего, однако, используются функции с побочным эффектом, то есть такие функции, которые помимо получения значения функции изменяют значения некоторых результирующих параметров, передаваемых функции по ссылке. Например,

Public Function SideEffect(ByVal X As Integer, ByRef Y As Integer) As Integer

SideEffect = X + Y

Y = Y + 1

End Function

Public Sub TestSideEffect()

Dim X As Integer, Y As Integer, Z As Integer

X = 3: Y = 5

Z = X + Y + SideEffect(X, Y)

Debug.Print X, Y, Z

X = 3: Y = 5

Z = SideEffect(X, Y) + X + Y

Debug.Print X, Y, Z

End Sub

Вот результаты вычислений:

3 6 16

3 6 17

Как видите, обращаться с функциями, обладающими побочным эффектом, следует с осторожностью. В нашем примере результат вычисления суммы трех слагаемых зависит от порядка их записи. Это противоречит основным принципам математики. Более того, следует понимать, что результат вычисления непредсказуем, поскольку VBA может для увеличения эффективности изменять порядок действий при вычислении арифметического выражения. Поэтому лучше не использовать в выражении вызов функции с побочным эффектом, изменяющей значения входящих в него переменных.

Создание процедуры

Здесь мы рассмотрим создание процедур, текст которых пишется вручную. Чтобы создать новую процедуру, нужно:

  1. открыть в окне проектов "Проект-(VBA)Project" (Project Explorer) папку с модулем (формой, документом, рабочим листом и т. п.), к которому требуется добавить процедуру, и, щелкнув этот модуль, открыть окно редактора с кодами процедур модуля;

  2. перейти в редактор, набрать ключевое слово (Sub, Function или Property), имя процедуры и ее аргументы; затем нажмите клавишу Enter, и VBA поместит ниже строку с соответствующим закрывающим оператором (End Sub, End Function, End Property);

  3. написать текст процедуры между ее заголовком и закрывающим оператором.

Как правило, следует "автоматизировать" работу, вызвав диалоговое окно "Вставка процедуры" (Insert Procedure). Последовательность действий в этом случае такая:

  • выбрать в меню Вставка (Insert) команду Процедура (Procedure);

  • в поле Имя (Name) появившегося окна "Вставка процедуры" (Insert Procedure) ввести имя процедуры.

  • указать в группе кнопок-переключателей Тип (Type) тип создаваемой процедуры: Подпрограмма (Sub), Функция (Function) или Свойство (Property);

  • указать в группе кнопок-переключателей "Область определения" (Scope) вид доступа к процедуре: Общая (Public) или Личная (Private);

  • пометить, если нужно, флажок "Все локальные переменные считать статическими" (All Local Variables as Statics), чтобы в заголовок процедуры добавился ключ Static;

  • щелкнуть кнопку OK - в окне редактора появится заготовка процедуры, состоящая из ее заголовка (без параметров) и закрывающего оператора;

  • добавить параметры в заголовок процедуры и написать текст процедуры между ее заголовком и закрывающим оператором.