Шаг 67 - Инструкция Sub

Приостанавливает выполнение.

[Private | Public] [Static] Sub имя [(списокАргументов)] 
	[инструкции]
	[Exit Sub]
	[инструкции]
End Sub

Параметры
Public
Необязательный. Указывает, что процедура Sub доступна для всех других процедур во всех модулях. При использовании в личном модуле (модуле, который содержит инструкцию Option Private) такая процедура является недоступной вне проекта.
Private
Необязательный. Указывает, что процедура Sub доступна для других процедур только того модуля, в котором она описана.
Static
Необязательный. Указывает, что локальные переменные процедуры Sub сохраняются в промежутках времени между вызовами этой процедуры. Атрибут Static не действует на переменные, описанные вне процедуры Sub, даже если они используются в процедуре.
имя
Обязательный. Имя процедуры Sub, удовлетворяющее стандартным правилам именования переменных.
списокАргументов
Необязательный. Список переменных, представляющий аргументы, которые передаются в процедуру Sub при ее вызове. Имена переменных разделяются запятой.

инструкции
Необязательный. Любая группа инструкций, выполняемых в процедуре 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

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 16.02.2002