Название: Excel. Трюки и эффекты
Автор: Алексей Гладкий
Издательство: Гладкий Алексей Анатольевич
Жанр: Программы
isbn:
isbn:
Ниже приведен пример процедуры, имеющей два аргумента, при этом второй аргумент необязательный и передается по ссылке:
Sub ProcedureExample(ByVal intNumber As Integer, Optional fFlag = True)
' Инструкции процедуры
…
End Sub
Проведенную процедуру можно модифицировать так, чтобы вместо необязательного второго параметра процедура принимала произвольное количество аргументов, из которых формируется массив:
Sub ProcedureExample(ByVal intNumber As Integer, ParamArray varArray())
' Инструкции процедуры
…
End Sub
Внимание!
Два приведенных примера процедур в программе на VBA одновременно присутствовать не могут. Это обусловлено тем, что язык VBA не поддерживает перегрузку процедур и функций (создание процедур и функций с одинаковыми именами, но с разными параметрами).
Вызов процедур
Для вызова процедуры в программе на VBA предусмотрена инструкция Call, формат которой приведен ниже:
[Call] Имя_процедуры [Список_аргументов]
Здесь элемент Имя_процедуры представляет собой идентификатор вызываемой процедуры. Если процедура принимает аргументы, то они должны быть указаны на месте элемента Список_аргументов через запятую. В качестве аргументов в вызывающей процедуре или функции используются константные значения или идентификаторы переменных соответствующих типов.
Эта инструкция позволяет также вызывать и функции, но при этом возвращаемое ими значение получить невозможно.
Примечание
Интересной особенностью инструкции Call является то, что само ключевое слово Call можно опускать. Если ключевое слово Call используется, то список аргументов процедуры необходимо заключать в скобки. В противном случае скобок быть не должно.
Пусть имеется процедура:
Sub ProcedureExample(ByVal intNumber As Integer, ParamArray varArray())
' Инструкции процедуры
…
End Sub
Пусть также имеется процедура TestExample, в которой необходимо вызывать процедуру ProcedureExample. Процедуру TestExample можно реализовать следующим образом:
Sub TestExample()
' Инструкции процедуры
…
' Вызов ProcedureExample
Call ProcedureExample(123, «Значение1», «Значение2», «Значение3»)
' Инструкции процедуры
…
End Sub
Если в TestExample не использовать ключевое слово Call, то вызов процедуры будет выглядеть так:
' Вызов ProcedureExample
ProcedureExample 123, «Значение1», «Значение2», «Значение3»
Далее, перед тем как рассматривать особенности передачи значений в процедуры, целесообразно рассмотреть создание и вызов функций. Это связано с тем, что передача параметров в процедуры и функции происходит одинаково.
Объявление СКАЧАТЬ