Что такое sub в vba

Оператор 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 ]

Примечания

Если явно не указано с помощью процедур Public, Private или 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.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Вызов процедур Sub и Function

Чтобы вызвать процедуру Sub из другой процедуры, введите имя процедуры и включите значения для всех требуемых аргументов. Оператор Call не является обязательным, но в случае его использования вам следует заключить все аргументы в скобки.

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Вызов процедур Sub с несколькими аргументами

В приведенном ниже примере показано два способа для вызова процедуры Sub с несколькими аргументами. При втором вызове аргументы должны быть заключены в скобки, так как используется оператор Call.

Использование круглых скобок при вызове процедур функций

Чтобы использовать возвращаемое значение функции, назначьте ее переменной, и заключите аргументы в скобки, как показано в следующем примере.

Если возвращаемое значение функции вас не интересует, можно вызвать функцию тем же способом, что и процедуру Sub. Опустите скобки, укажите аргументы и не назначайте функцию переменной, как показано в следующем примере.

Если включить скобки в предыдущий пример, оператор вызывает ошибку синтаксиса.

Передача именованных аргументов

Оператор в процедуре Sub или Function может передавать значения в вызываемые процедуры с помощью именованных аргументов. Вы можете указывать именованные аргументы в любом порядке. Именованный аргумент состоит из имени аргумента, за которым стоит двоеточие и знак равенства (:=), а затем следует присвоенное аргументу значение.

В примере ниже функция MsgBox вызывается с использованием именованных аргументов без возвращаемого значения.

В примере ниже функция MsgBox вызывается с использованием именованных аргументов. Возвращаемое значение присваивается переменной.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Sub Statement (Visual Basic)

Declares the name, parameters, and code that define a Sub procedure.

Syntax

Parts

Optional. Indicates definition of a partial method. See Partial Methods.

Optional. Can be one of the following:

Optional. Can be one of the following:

Required. Name of the procedure. See Declared Element Names. To create a constructor procedure for a class, set the name of a Sub procedure to the New keyword. For more information, see Object Lifetime: How Objects Are Created and Destroyed.

Optional. List of type parameters for a generic procedure. See Type List.

Optional. List of local variable names representing the parameters of this procedure. See Parameter List.

Optional. Indicates that this procedure implements one or more Sub procedures, each one defined in an interface implemented by this procedure’s containing class or structure. See Implements Statement.

Required if Implements is supplied. List of Sub procedures being implemented.

Each implementedprocedure has the following syntax and parts:

Optional. Indicates that this procedure can handle one or more specific events. See Handles.

Required if Handles is supplied. List of events this procedure handles.

Each eventspecifier has the following syntax and parts:

PartDescription
eventvariableRequired. Object variable declared with the data type of the class or structure that raises the event.
eventRequired. Name of the event this procedure handles.

Optional. Block of statements to run within this procedure.

Terminates the definition of this procedure.

Remarks

All executable code must be inside a procedure. Use a Sub procedure when you don’t want to return a value to the calling code. Use a Function procedure when you want to return a value.

Defining a Sub Procedure

You can define a Sub procedure only at the module level. The declaration context for a sub procedure must, therefore, be a class, a structure, a module, or an interface and can’t be a source file, a namespace, a procedure, or a block. For more information, see Declaration Contexts and Default Access Levels.

Sub procedures default to public access. You can adjust their access levels by using the access modifiers.

Returning from a Sub Procedure

When a Sub procedure returns to the calling code, execution continues with the statement after the statement that called it.

The following example shows a return from a Sub procedure.

The Exit Sub and Return statements cause an immediate exit from a Sub procedure. Any number of Exit Sub and Return statements can appear anywhere in the procedure, and you can mix Exit Sub and Return statements.

Calling a Sub Procedure

You call a Sub procedure by using the procedure name in a statement and then following that name with its argument list in parentheses. You can omit the parentheses only if you don’t supply any arguments. However, your code is more readable if you always include the parentheses.

A Sub procedure and a Function procedure can have parameters and perform a series of statements. However, a Function procedure returns a value, and a Sub procedure doesn’t. Therefore, you can’t use a Sub procedure in an expression.

You can use the Call keyword when you call a Sub procedure, but that keyword isn’t recommended for most uses. For more information, see Call Statement.

Visual Basic sometimes rearranges arithmetic expressions to increase internal efficiency. For that reason, if your argument list includes expressions that call other procedures, you shouldn’t assume that those expressions will be called in a particular order.

Async Sub Procedures

By using the Async feature, you can invoke asynchronous functions without using explicit callbacks or manually splitting your code across multiple functions or lambda expressions.

If you mark a procedure with the Async modifier, you can use the Await operator in the procedure. When control reaches an Await expression in the Async procedure, control returns to the caller, and progress in the procedure is suspended until the awaited task completes. When the task is complete, execution can resume in the procedure.

An Async procedure returns to the caller when either the first awaited object that’s not yet complete is encountered or the end of the Async procedure is reached, whichever occurs first.

Async Sub procedures are primarily used for event handlers, where a value can’t be returned. An Async Sub procedure can’t be awaited, and the caller of an Async Sub procedure can’t catch exceptions that the Sub procedure throws.

An Async procedure can’t declare any ByRef parameters.

Example 1

The following example uses the Sub statement to define the name, parameters, and code that form the body of a Sub procedure.

Example 2

Источник

Sub statement

Declares the name, arguments, and code that form the body of a Sub procedure.

Syntax

[ Private | Public | Friend ] [ Static ] Sub name [ ( arglist ) ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub

The Sub statement syntax has these parts:

PartDescription
PublicOptional. Indicates that the Sub procedure is accessible to all other procedures in all modules. If used in a module that contains an Option Private statement, the procedure is not available outside the project.
PrivateOptional. Indicates that the Sub procedure is accessible only to other procedures in the module where it is declared.
FriendOptional. Used only in a class module. Indicates that the Sub procedure is visible throughout the project, but not visible to a controller of an instance of an object.
StaticOptional. Indicates that the Sub procedure’s local variables are preserved between calls. The Static attribute doesn’t affect variables that are declared outside the Sub, even if they are used in the procedure.
nameRequired. Name of the Sub; follows standard variable naming conventions.
arglistOptional. List of variables representing arguments that are passed to the Sub procedure when it is called. Multiple variables are separated by commas.
statementsOptional. Any group of statements to be executed within the Sub procedure.

The arglist argument has the following syntax and parts:

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ As type ] [ = defaultvalue ]

PartDescription
OptionalOptional. Keyword indicating that an argument is not required. If used, all subsequent arguments in arglist must also be optional and declared by using the Optional keyword. Optional can’t be used for any argument if ParamArray is used.
ByValOptional. Indicates that the argument is passed by value.
ByRefOptional. Indicates that the argument is passed by reference. ByRef is the default in Visual Basic.
ParamArrayOptional. Used only as the last argument in arglist to indicate that the final argument is an Optional array of Variant elements. The ParamArray keyword allows you to provide an arbitrary number of arguments. ParamArray can’t be used with ByVal, ByRef, or Optional.
varnameRequired. Name of the variable representing the argument; follows standard variable naming conventions.
typeOptional. Data type of the argument passed to the procedure; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (variable-length only), Object, Variant, or a specific object type. If the parameter is not Optional, a user-defined type may also be specified.
defaultvalueOptional. Any constant or constant expression. Valid for Optional parameters only. If the type is an Object, an explicit default value can only be Nothing.

Remarks

If not explicitly specified by using Public, Private, or Friend, Sub procedures are public by default.

If Static isn’t used, the value of local variables is not preserved between calls.

The Friend keyword can only be used in class modules. However, Friend procedures can be accessed by procedures in any module of a project. A Friend procedure doesn’t appear in the type library of its parent class, nor can a Friend procedure be late bound.

Sub procedures can be recursive; that is, they can call themselves to perform a given task. However, recursion can lead to stack overflow. The Static keyword usually is not used with recursive Sub procedures.

All executable code must be in procedures. You can’t define a Sub procedure inside another Sub, Function, or Property procedure.

The Exit Sub keywords cause an immediate exit from a Sub procedure. Program execution continues with the statement following the statement that called the Sub procedure. Any number of Exit Sub statements can appear anywhere in a Sub procedure.

Like a Function procedure, a Sub procedure is a separate procedure that can take arguments, perform a series of statements, and change the value of its arguments. However, unlike a Function procedure, which returns a value, a Sub procedure can’t be used in an expression.

You call a Sub procedure by using the procedure name followed by the argument list. See the Call statement for specific information about how to call Sub procedures.

Variables used in Sub procedures fall into two categories: those that are explicitly declared within the procedure and those that are not. Variables that are explicitly declared in a procedure (using Dim or the equivalent) are always local to the procedure. Variables that are used but not explicitly declared in a procedure are also local unless they are explicitly declared at some higher level outside the procedure.

A procedure can use a variable that is not explicitly declared in the procedure, but a naming conflict can occur if anything you defined at the module level has the same name. If your procedure refers to an undeclared variable that has the same name as another procedure, constant or variable, it is assumed that your procedure is referring to that module-level name. To avoid this kind of conflict, explicitly declare variables. You can use an Option Explicit statement to force explicit declaration of variables.

You can’t use GoSub, GoTo, or Return to enter or exit a Sub procedure.

Example

This example uses the Sub statement to define the name, arguments, and code that form the body of a Sub procedure.

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Оператор Sub (Visual Basic)

Объявляет имя, параметры и код, определяющие Sub процедуру.

Синтаксис

Компоненты

Необязательный элемент. См. список атрибутов.

Необязательный элемент. Указывает определение разделяемого метода. См. раздел разделяемые методы.

Необязательный элемент. Может применяться один из перечисленных ниже типов.

Необязательный элемент. Может применяться один из перечисленных ниже типов.

Необязательный элемент. См. раздел Shared.

Необязательный элемент. См. раздел Shadows.

Необязательный элемент. См. статью Async.

Обязательный элемент. Имя процедуры. См. раздел Declared Element Names. Чтобы создать процедуру конструктора для класса, задайте в качестве имени Sub процедуры New ключевое слово. Дополнительные сведения см. в разделе время существования объекта: как создаются и уничтожаются объекты.

Необязательный элемент. Список параметров типа для универсальной процедуры. См. список типов.

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

Необязательный элемент. Указывает, что эта процедура реализует одну или несколько Sub процедур, каждая из которых определена в интерфейсе, реализованном классом или структурой этой процедуры. См. инструкцию Implements.

Каждый элемент implementedprocedure имеет перечисленные ниже синтаксис и компоненты.

Необязательный элемент. Указывает, что эта процедура может управлять одним или несколькими конкретными событиями. См. раздел Handles.

Каждый элемент eventspecifier имеет перечисленные ниже синтаксис и компоненты.

ЧастьОписание
eventvariableОбязательный элемент. Объектная переменная, объявленная с типом данных класса или структуры, которая вызывает событие.
eventОбязательный элемент. Имя события, обрабатываемого этой процедурой.

Необязательный элемент. Блок инструкций для выполнения в рамках этой процедуры.

Завершает определение этой процедуры.

Комментарии

Весь исполняемый код должен находиться внутри процедуры. Используйте Sub процедуру, если не нужно возвращать значение в вызывающий код. Используйте Function процедуру, если требуется вернуть значение.

Определение подпроцедуры

Процедуру можно определить Sub только на уровне модуля. Контекст объявления для процедуры, следовательно, должен быть классом, структурой, модулем или интерфейсом и не может быть исходным файлом, пространством имен, процедурой или блоком. Дополнительные сведения см. в разделе Контексты объявления и уровни доступа по умолчанию.

Sub процедуры по умолчанию имеют открытый доступ. Уровни доступа можно изменить с помощью модификаторов доступа.

Возврат из подпроцедуры

Когда Sub процедура возвращается в вызывающий код, выполнение переходит к инструкции после оператора, вызвавшего ее.

В следующем примере показан возврат из Sub процедуры.

Exit Sub Операторы и Return вызывают немедленный выход из Sub процедуры. Любое количество Exit Sub инструкций и Return может использоваться в любом месте процедуры, и можно смешивать Exit Sub Return операторы и.

Вызов процедуры подпрограммы

Процедура вызывается с Sub помощью имени процедуры в инструкции и затем после этого имени вместе со списком аргументов в круглых скобках. Скобки можно опустить, только если не указаны аргументы. Однако код является более удобочитаемым, если всегда включать круглые скобки.

Sub Процедура и Function процедура могут иметь параметры и выполнять ряд инструкций. Однако Function процедура возвращает значение, а Sub процедура — нет. Поэтому нельзя использовать Sub процедуру в выражении.

Call Ключевое слово можно использовать при вызове Sub процедуры, но это ключевое слово не рекомендуется для большинства случаев использования. Дополнительные сведения см. в разделе оператор Call.

Visual Basic иногда переупорядочивает арифметические выражения для повышения внутренней эффективности. По этой причине, если список аргументов содержит выражения, вызывающие другие процедуры, не следует рассчитывать на то, что эти выражения будут вызываться в определенном порядке.

Процедуры Async

С помощью функции Async можно вызывать асинхронные функции без использования явных обратных вызовов или вручную разделить код по нескольким функциям или лямбда-выражениям.

Async Процедура возвращается к вызывающему объекту, когда происходит либо первый ожидающий объект, который еще не завершен, либо Async достигнут конец процедуры, в зависимости от того, что произойдет раньше.

Async«Sub процедуры в основном используются для обработчиков событий, где значение не может быть возвращено. Async Sub Процедуру нельзя ожидать, и вызывающая Async Sub процедура не может перехватывать исключения, которые Sub создает процедура.

Пример 1

В следующем примере оператор используется Sub для определения имени, параметров и кода, образующих тело Sub процедуры.

Пример 2

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *