Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание пользовательских п ÒÉÌÏÖÅÎÉÊ ÓÒÅÄÓÔÁÍ...doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
2.02 Mб
Скачать

Вызов процедуры

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

  • Чтобы вызвать процедуру общего типа или процедуру-функцию без параметров, достаточно записать ее имя в вызывающей процедуре: proc_A или b=func_b.

  • Фактические параметры процедуры общего типа (аргументы) отделяются от имени процедуры пробелом и перечисляются через запятую: proc_A arg1, arg2.

  • Аргументы функции перечисляются в скобках после имени функции: func_b(arg1, arg2).

  • Порядок перечисления аргументов соответствует порядку формальных параметров процедуры (функции).

  • Для вызова процедуры общего типа можно воспользоваться оператором Call, задавая значения аргументов в скобках Call proc_A(arg1, Arg2).

  • Процедура-функция не может быть выполнена командой Сервис-Макрос-Макросы, а только может быть вызвана другой процедурой или функцией.

  • Так как процедура-функция возвращает значение, она используется в выражениях, например, в операторе присваивания.

  • Процедура общего типа не может быть использована в выражениях, но может быть выполнена командой Сервис-Макрос-Макросы.

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

Вызываемая процедура может находиться в том же модуле (проекте), что и вызвавшая ее процедура, или в другом модуле (проекте).

Важно

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

  • Если имя процедуры не является уникальным (в разных модулях проекта или в разных проектах объявлены процедуры с одинаковыми именами), то при вызове процедуры необходимо уточнить, о какой именно процедуре идет речь.

Это производится стандартным способом – в операторе вызова процедуры указывается составное имя процедуры, которое строится из имени проекта, имени модуля и имени процедуры, разделенных точкой: ProjectName.ModuleName.ProcedureName

Например, вызов процедуры Proc_A, расположенной в модуле Module1 проекта Project1 можно записать так: Project1.Module1.Proc_A.

Замечание.

  • Имя проекта не является именем рабочей книги.

Пример

Для первых пяти натуральных чисел рассчитать квадрат и куб числа.

Public Sub Proc_param()

Dim i As Integer

For i = 1 To 5

Proc_print I ‘вызов процедуры

Next i

End Sub

Public Sub Proc_print(fi As Integer)

Debug.Print fi, fi ^ 2, fi ^ 3 ‘распечатка степеней аргумента

End Sub

Основная процедура Proc_param организует цикл на пять чисел и вызывает процедуру Proc_print для распечатки в окне Immediate самого числа, его квадрата и куба.

При вызове процедуры происходит передача аргумента i, который используется в Proc_print уже как значение формального параметра fi. Типы переменных i и fi совпадают.

Call Proc_print (i) – альтернативная запись вызова процедуры.