Приостанавливает выполнение.
[Private | Public] [Static] Sub имя [(списокАргументов)] [инструкции] [Exit Sub] [инструкции] End Sub
Параметры
Public
Необязательный. Указывает, что процедура
Sub доступна для всех других процедур во всех модулях. При использовании
в личном модуле (модуле, который содержит инструкцию Option Private)
такая процедура является недоступной вне
проекта.
Private
Необязательный. Указывает, что процедура
Sub доступна для других процедур только того модуля, в котором она
описана.
Static
Необязательный. Указывает, что локальные переменные
процедуры Sub сохраняются в промежутках времени между вызовами этой
процедуры. Атрибут Static не действует на переменные, описанные вне
процедуры Sub, даже если они используются в
процедуре.
имя
Обязательный. Имя процедуры Sub,
удовлетворяющее стандартным правилам именования
переменных.
списокАргументов
Необязательный. Список переменных,
представляющий аргументы, которые передаются в процедуру Sub при ее
вызове. Имена переменных разделяются запятой.
Optional Необязательный. Ключевое слово, указывающее, что аргумент не является обязательным. При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional. Все аргументы, описанные как Optional, должны иметь тип Variant. Не допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray. ByVal Необязательный. Указывает, что этот аргумент передается по значению. ByRef Необязательный. Указывает, что этот аргумент передается по ссылке. Описание ByRef используется в Visual Basic по умолчанию. ParamArray Необязательный. Используется только в качестве последнего элемента в списке списокАргументов для указания, что конечным аргументом является описанный как Optional массив значений типа Variant. Ключевое слово ParamArray позволяет задавать произвольное количество аргументов. Оно не может быть использовано со словами ByVal, ByRef или Optional. имяПеременной Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных. тип Необязательный. Тип данных аргумента, переданного в процедуру; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant. Если отсутствует ключевое слово Optional, могут быть также указаны определяемый пользователем тип или объектный тип. поУмолчанию Необязательный. Любая константа или выражение, дающее константу. Используется только вместе с параметром Optional. Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.
инструкции
Необязательный. Любая группа инструкций, выполняемых в
процедуре Sub.
Замечания
Процедуры Sub, тип которых не указан явно с помощью слов
Public или Private, являются общими по умолчанию. Если не
используется слово Static, значения локальных переменных не сохраняются
между вызовами процедур.
Допускаются рекурсивные процедуры Sub; т.е.
они могут вызывать сами себя для выполнения определенных задач. Однако рекурсия
может приводить к переполнению стека. Ключевое слово Static обычно не
используется с рекурсивными процедурами Sub.
Все выполняемые команды
должны содержаться в процедурах. Не допускается определение процедуры Sub
внутри другой процедуры Sub, Function или
Property.
Инструкция Exit Sub приводит к немедленному выходу из
процедуры Sub. Выполнение программы продолжается с инструкции, следующей
за инструкцией, содержащей вызов процедуры Sub. В любом месте процедуры
Sub допускается наличие любого числа инструкций Exit
Sub.
Подобно процедурам Function, процедура Sub является
самостоятельной процедурой, которая может получать аргументы, выполнять
последовательность инструкций и изменять значения своих аргументов. Однако в
отличие от процедуры Function, которая возвращает значение, процедура
Sub не может применяться в выражении.
Процедура Sub вызывается
в выражении по своему имени, за которым следует список аргументов в скобках. Для
получения дополнительных сведений о вызовах процедур Sub см. описание
инструкции Call.
Переменные, используемые в процедурах Sub,
разбиваются на две категории: явно описанные внутри процедуры и не описанные
внутри процедуры. Переменные, которые явно описаны в процедуре (с помощью
ключевого слова Dim или эквивалентного ему), всегда являются локальными
для этой процедуры. Переменные, которые используются, но явно не описаны в
процедуре, также являются локальными, если они явно не описаны на более высоком
уровне.
В процедуре допускается использование переменной, которая явно не
описана в этой процедуре, но при этом может возникать конфликт имен, если на
уровне модуля был определен элемент с тем же самым именем. Если в процедуре
содержится ссылка на неописанную переменную, имя которой совпадает с именем
другой процедуры, константы или переменной, то подразумевается, что процедура
ссылается на это имя на уровне модуля. Чтобы избежать возникновения конфликтов
такого рода, следует пользоваться явным описанием переменных. Для включения
обязательного явного описания переменных используется инструкция Option
Explicit
Для входа или выхода из процедуры Sub нельзя использовать
инструкции GoSub, GoTo или Return.
Пример
В данном примере инструкция Sub используется для описания
имени, аргументов и кода, составляющих основу процедуры Sub.
' Описание процедуры Sub. ' Процедура Sub с двумя аргументами. Sub SubComputeArea(Length, TheWidth) Dim Area As Double ' Объявляет локальную переменную. If Length = 0 Or TheWidth = 0 Then ' Если хотя бы один из аргументов равен 0. Exit Sub ' Немедленно завершает процедуру Sub. End If Area = Length * TheWidth ' Вычисляет площадь прямоугольника. Debug.Print Area ' Выводит полученное значение в окно отладки. End Sub