что такое sub в vba
VBA-Урок 9. Процедуры и функции
Чтобы сделать процедуру доступной только в определенном модуле, используется ключевое слово Private:
Запуск процедуры с середины другой процедуры
Чтобы выполнить процедуру с середины другой процедуры, просто введите ее название.
Здесь есть очень простой пример:
Аргументы
Аргументы делают возможным использование значений из процедуры в под-процедуры (запомните, что по умолчанию, переменные являются доступны только по той процедуры, в которой они были объявлены).
К процедуре «warning» был добавлен аргумент, в данном случае это переменная «var_text» с типом «String» (строка):
Эта процедура требует аргумент, поэтому мы должны поставить значение после «warning», чтобы выполнить ее:
Когда мы хотим прописать несколько аргументов, тогда они должны быть отделены запятыми.
Необязательные аргументы
По умолчанию, если процедура имеет аргументы, то они должны быть обязательно проставлены, и если они не проставлены, тогда процедура не выполнится.
Теперь эта процедура может быть выполнена с или без опционального аргумента, как здесь:
Аргументы должны быть введены в правильном порядке.
Здесь есть пример, который использует два фрагмента кода, которые рассматривались выше:
См. рисунок ниже (пример 1):
Чтобы стало понятнее, ниже есть пример того, что произойдет, если макрос будет запущен на выполнение:
Ниже вы можете увидеть как предыдущий код и ByVal работают:
Функции
Основным отличием между процедурой и функцией является то, что функция возвращает значение.
Вот простой пример:
Функция может быть использована на рабочем листе, подобно любой другой функции в Excel.
Например, чтобы получить квадрат значения, которое введенное в ячейку A1:
Оператор 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 и обратная связь.
Процедуры (Visual Basic)
При каждом вызове процедуры выполняются ее операторы, начиная с первого исполняемого оператора после Sub инструкции и заканчивая первой End Sub Exit Sub Return инструкцией, или.
Sub Процедура может принимать аргументы, такие как константы, переменные или выражения, которые передаются в него вызывающим кодом.
Синтаксис объявления
Синтаксис для объявления Sub процедуры выглядит следующим образом:
В modifiers можно указать уровень доступа и сведения о перегрузке, переопределении, совместном использовании и затенении. Дополнительные сведения см. в разделе оператор подраздела.
Объявление параметра
Каждый параметр процедуры объявляется аналогично объявлению переменной, указывая имя параметра и тип данных. Кроме того, можно указать механизм передачи, а также определить, является ли параметр необязательным или массивом параметров.
Для каждого параметра в списке параметров используется следующий синтаксис:
Если параметр является необязательным, необходимо также указать значение по умолчанию в составе объявления. Для указания значения по умолчанию используется следующий синтаксис:
Параметры как локальные переменные
Когда управление передается в процедуру, каждый параметр рассматривается как локальная переменная. Это означает, что его время существования совпадает с жизненным циклом процедуры, а ее областью является вся процедура.
Синтаксис вызова
Sub Процедура явно вызывается с помощью изолированного вызывающего оператора. Его нельзя вызвать, используя его имя в выражении. Необходимо указать значения для всех аргументов, которые не являются необязательными, и необходимо заключить список аргументов в круглые скобки. Если аргументы не указаны, можно дополнительно опустить круглые скобки. Использование Call ключевого слова является необязательным, но не рекомендуется.
Для вызова Sub процедуры используется следующий синтаксис:
Метод можно вызвать Sub извне класса, который его определяет. Во-первых, необходимо использовать New ключевое слово для создания экземпляра класса или вызвать метод, возвращающий экземпляр класса. Дополнительные сведения см. в разделе оператор New. Затем можно использовать следующий синтаксис, чтобы вызвать Sub метод для объекта экземпляра:
Иллюстрация объявления и вызова
Следующая Sub процедура сообщает оператору компьютера, какая задача собирается выполнить приложение, а также отображает метку времени. Вместо дублирования этого кода в начале каждой задачи приложение просто вызывает tellOperator из различных расположений. Каждый вызов передает строку в task аргументе, который определяет запускаемую задачу.
Процедуры типа Sub
Процедуры типа Sub
Термин процедура типа Sub кажется мне довольно неуклюжим, но он достаточно точно отражает суть дела. В некоторых языках программирования суб процедурам и, или подпрограммами, называются процедуры, вызываемые главными процедурами. В VBA, хотя процедуры типа Sub и могут вызываться другими процедурами, главная процедура программы всегда является процедурой типа Sub. Это судьба.
Public Sub ПриятнаяПроцедура()
Dim ДоброеСообщение As String
Первая строка, объявление процедуры типа Sub, решает две жизненно важные задачи.
Во-первых, она говорит, где начинается процедура, так что VBA теперь знает, откуда начинать выполнение программного кода при вызове процедуры. Во-вторых, объявляет характеристики процедуры, обсуждение которых предполагается в следующем разделе.
Каждая процедура типа Sub должна заканчиваться оператором End Sub, который дает VBA знать, где следует прекратить выполнение программного кода.
Элементы объявления процедуры типа Sub
В операторе объявления процедуры первый термин Public определяет область видимости процедуры. Для области видимости можно указать либо Public, либо Private. При этом Public подразумевается по умолчанию, так что это ключевое слово можно пропустить. Логично, что пропуск ключевого слова Public делает область видимости такой, которой вообще не нужно интересоваться. Снова повторю, что подробно область видимости описана в разделе Обзор области видимости.
Далее идет ключевое слово Sub, которое просто указывает на то, что здесь определяется процедура типа Sub. За ним следует имя процедуры, которое может быть каким угодно, подчиняясь лишь правилам присвоения имен, приведенным дальше в настоящей главе.
Читайте также
15.3 Программы и процедуры RPC
15.3 Программы и процедуры RPC Основные концепции RPC достаточно просты:? Служба RPC реализуется одной или несколькими выполняющимися на сервере программами. Например, существуют отдельные программы управления доступом и блокировок файлов.? Каждая программа может выполнять
15.6.2 Процедуры portmapper
15.6.2 Процедуры portmapper Выполняемые программой portmapper процедуры перечислены в таблице 15.2.Таблица 15.2 Процедуры portmapper Процедура Описание PMAPPROC_NULL Возвращает ответ, указывающий на активное состояние portmapper. PMAPPROC_SET Используется при регистрации службы (т.е. при включении в
15.7.2 Процедуры rpcbind
15.7.2 Процедуры rpcbind Процедуры программы rpcbind версии 4 представлены в таблице 15.3.Таблица 15.3 Процедуры rpcbind Процедура Описание RPCBPROC_SET Используется службой регистрации программ через локальную RPCBIND. RPCBPROC_UNSET Используется для отмены регистрации локальной
15.15.1 Процедуры монтирования
15.15.1 Процедуры монтирования Процедуры, поддерживающие программу mount на сервере, показаны в таблице 15.4.Таблица 15.4 Процедуры монтирования Процедура Описание 0 Null (пустая): Ответ указывает на активность программы. 1 Add Mount Entry (добавить точку монтирования): В список команды
15.17.2 Процедуры NFS
15.17.2 Процедуры NFS Существуют процедуры NFS, обеспечивающие клиенту доступ, чтение или запись удаленного файла. Клиент может узнать структуру и реальную емкость удаленной файловой системы либо запросить атрибуты удаленного файла. Допустимо удалять и переименовывать
3.2. Процедуры
2. Процедуры и функции для переменных строкового типа
2. Процедуры и функции для переменных строкового типа 1. Function Copy(S: String; Index, Count: Integer): String; Возвращает подстроку строки. S – выражение типа String.Index и Count – выражения целого типа. Функция возвращает строку, содержащую Count символов, начинающихся с позиции Index. Если Index больше, чем
Процедуры
Процедуры Введение Наконец-то мы принимаемся за хорошую главу!К этому моменту мы изучили почти все основные особенности компиляторов и синтаксического анализа. Мы узнали как транслировать арифметические выражения, булевы выражения, управляющие конструкции,
Элементы объявления процедуры типа Sub
Элементы объявления процедуры типа Sub В операторе объявления процедуры первый термин Public определяет область видимости процедуры. Для области видимости можно указать либо Public, либо Private. При этом Public подразумевается по умолчанию, так что это ключевое слово можно
Процедуры типа Function
Отличия процедур типа Function от процедур типа Sub
Отличия процедур типа Function от процедур типа Sub Между процедурами типа Function и типа Sub есть одно существенное отличие: в процедуре типа Function обязательно где-то должен присутствовать по крайней мере один оператор, задающий значение этой функции. При этом используется имя
11. Строковый тип в Pascal. Процедуры и функции для переменных строкового типа
11. Строковый тип в Pascal. Процедуры и функции для переменных строкового типа Последовательность символов определенной длины называется строкой. Переменные строкового типа определяются путем указания имени переменной, зарезервированного слова string, и возможно, но не