Оператор Sub
Объявляет имя, аргументы и код, которые формируют тело процедуры Sub.
Синтаксис
[ Частный | Public | Друг ] [ Статическое ] Sub name [ (arglist) ]
[ заявления ]
[ Exit Sub ]
[ заявления ]
End Sub
Синтаксис оператора Sub состоит из следующих частей:
Part | Описание |
---|---|
Public | Необязательный элемент. Показывает, что процедура Sub доступна всем другим процедурам во всех модулях. При использовании в модуле, содержащем оператор Option Private, процедура становится недоступной вне проекта. |
Private | Необязательный элемент. Показывает, что процедура Sub доступна только другим процедурам из модуля, в котором она объявлена. |
Friend | Необязательный элемент. Используется только в модуле класса. Показывает, что процедура Sub видима по всему проекту, кроме контроллера экземпляра объекта. |
Static | Необязательный элемент. Показывает, что локальные переменные процедуры Sub сохраняются в промежутках между вызовами. Атрибут Static не влияет на переменные, объявленные вне процедуры Sub, даже если они используются в процедуре. |
name | Обязательно. Имя процедуры Sub массива; должен соответствовать стандартным правилам именования переменных. |
arglist | Необязательный элемент. Список переменных, представляющих аргументы, передаваемые в процедуру Sub при ее вызове. В качестве разделителя переменных используется запятая. |
Операторы | Необязательный элемент. Любая группа операторов, выполняющихся внутри процедуры Sub. |
Аргумент arglist имеет следующий синтаксис и элементы:
[ Необязательный ] [ ByVal | ByRef ] [ ParamArray ] varname [( ) ] [ Как тип ] [ = defaultvalue ]
Part | Описание |
---|---|
Необязательное | Необязательный элемент. Ключевое слово, которое указывает, что аргумент не является обязательным. При использовании все последующие аргументы в arglist также должны быть необязательными и объявляться с помощью ключевого слова Необязательный . Optional не может использоваться для каких-либо аргументов, если используется ParamArray. |
ByVal | Необязательный элемент. Указывает, что аргумент передается значением. |
ByRef | Необязательный элемент. Указывает, что аргумент передается по ссылке. ByRef является значением по умолчанию в Visual Basic. |
ParamArray | Необязательный элемент. Используется только в качестве последнего аргумента в arglist , чтобы указать, что последним аргументом является необязательный массив элементов Variant . Ключевое слово ParamArray позволяет предоставлять произвольное число аргументов. Ключевое слово ParamArray не может использоваться с аргументами ByVal, ByRef или Optional. |
varname | Обязательно. Имя переменной, представляющее аргумент; соответствует стандарту соглашений об именовании переменных. |
тип | Необязательный элемент. Тип данных аргумента, переданного процедуре; могут быть Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (не поддерживается в настоящее время), Date, String (только для переменной длины), Object, Variant или определенного типа объекта. Если параметр не является Optional, может быть указан определяемый пользователем тип. |
defaultvalue | Необязательный элемент. Любая константа или константное выражение. Действительно только для параметров Optional. Если типом является Object, явным значением по умолчанию может быть только Nothing. |
Примечания
Если не указано явно с помощью общедоступных**,** частных или friend, процедуры Sub являются общедоступными по умолчанию.
Если не используется static, между вызовами не сохраняется значение локальных переменных.
Ключевое слово Friend может использоваться только в модулях классов. Однако доступ к процедурам Friend может осуществляться в любом модуле проекта. Процедура Friend не отображается в библиотеке типов своего родительского класса; процедура Friend не может быть привязана позднее.
Процедуры 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 для принудительного явного декларирования переменных.
Примечание
Операторы GoSub, GoTo или Return нельзя использовать для входа в процедуру Sub и выхода из нее.
Пример
В приведенном ниже примере оператор Sub используется для определения имени, аргументов и кода, формирующих тело процедуры Sub.
' Sub procedure definition.
' Sub procedure with two arguments.
Sub SubComputeArea(Length, TheWidth)
Dim Area As Double ' Declare local variable.
If Length = 0 Or TheWidth = 0 Then
' If either argument = 0.
Exit Sub ' Exit Sub immediately.
End If
Area = Length * TheWidth ' Calculate area of rectangle.
Debug.Print Area ' Print Area to Debug window.
End Sub
См. также
- Вызов процедур Sub и Function
- Общие сведения об именованных и необязательных аргументах
- Написание процедуры Sub
- Типы данных
- Операторы
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.