public sub vba что значит
Процедуры (Visual Basic)
При каждом вызове процедуры выполняются ее операторы, начиная с первого исполняемого оператора после Sub инструкции и заканчивая первой End Sub Exit Sub Return инструкцией, или.
Sub Процедура может принимать аргументы, такие как константы, переменные или выражения, которые передаются в него вызывающим кодом.
Синтаксис объявления
Синтаксис для объявления Sub процедуры выглядит следующим образом:
В modifiers можно указать уровень доступа и сведения о перегрузке, переопределении, совместном использовании и затенении. Дополнительные сведения см. в разделе оператор подраздела.
Объявление параметра
Каждый параметр процедуры объявляется аналогично объявлению переменной, указывая имя параметра и тип данных. Кроме того, можно указать механизм передачи, а также определить, является ли параметр необязательным или массивом параметров.
Для каждого параметра в списке параметров используется следующий синтаксис:
Если параметр является необязательным, необходимо также указать значение по умолчанию в составе объявления. Для указания значения по умолчанию используется следующий синтаксис:
Параметры как локальные переменные
Когда управление передается в процедуру, каждый параметр рассматривается как локальная переменная. Это означает, что его время существования совпадает с жизненным циклом процедуры, а ее областью является вся процедура.
Синтаксис вызова
Sub Процедура явно вызывается с помощью изолированного вызывающего оператора. Его нельзя вызвать, используя его имя в выражении. Необходимо указать значения для всех аргументов, которые не являются необязательными, и необходимо заключить список аргументов в круглые скобки. Если аргументы не указаны, можно дополнительно опустить круглые скобки. Использование Call ключевого слова является необязательным, но не рекомендуется.
Для вызова Sub процедуры используется следующий синтаксис:
Метод можно вызвать Sub извне класса, который его определяет. Во-первых, необходимо использовать New ключевое слово для создания экземпляра класса или вызвать метод, возвращающий экземпляр класса. Дополнительные сведения см. в разделе оператор New. Затем можно использовать следующий синтаксис, чтобы вызвать Sub метод для объекта экземпляра:
Иллюстрация объявления и вызова
Следующая Sub процедура сообщает оператору компьютера, какая задача собирается выполнить приложение, а также отображает метку времени. Вместо дублирования этого кода в начале каждой задачи приложение просто вызывает tellOperator из различных расположений. Каждый вызов передает строку в task аргументе, который определяет запускаемую задачу.
Public sub vba что значит
6. СОЗДАНИЕ ПОВТОРНО ИСПОЛЬЗУЕМОГО КОДА
6.1. Процедуры и функции
Visual Basic – процедурный язык программирования. Это означает, что в нем можно создавать блоки программного кода, на которые можно впоследствии ссылаться по их имени. После того как блок кода получит имя, он может быть вызван и выполнен. Маленькие программы, «живущие» в больших программах, называются функциями, если они возвращают какое-либо значение, и процедурами, если они значений не возвращают, и объединенными общим термином подпрограмма. Они делают процесс программирования более простым и быстрым, а создаваемый код – более надежным.
Разработки собственных процедур и функций – первый шаг к разработке инкапсулированного и повторно используемого кода. Под инкапсуляцией понимают сокрытие реализации свойств и методов объекта за его внешним интерфейсом.
Следует, однако, различать собственно процедуры и процедуры обработки событий. Первые содержат код, необходимый для многократного выполнения в разных программных блоках, а вторые всегда являются реакцией на события, происходящие в приложении.
Синтаксис объявления простой процедуры следующий:
[Private|Public] Sub SubName()
· SubName() – имя, присваиваемое процедуре.
Существует два способа добавить процедуру в программный код проекта:
· Написание кода в разделе General формы или модуля.
· Использование диалогового окна « Add Procedure »:
1) из меню « Tool » выберете пункт « Add Procedure », для открытия соответствующего диалогового окна;
Рис. 3. Диалоговое окно « Add Procedure »
2) введите имя процедуры в поле Name и щелкните по кнопке «Ok», чтобы добавить ее заготовку в форму или модуль;
3) после создания блока процедуры в него необходимо добавить нужный фрагмент кода.
Нельзя вводить код после ключевых слов « End Sub », поскольку это приведет к ошибке при компиляции программы.
Отличие процедуры от функции состоит лишь в том, что она всегда возвращает некоторое значение. Синтаксис функции указан ниже :
[Private|Public] Function FunctionName() As DataType
· FunctionName() – имя, присваиваемое функции.
· DataType – тип данных возвращаемого значения.
· ReturnValue – собственно возвращаемое значение, присваиваемое имени функции (только один раз!).
Добавить в проект функцию можно теми же способами, которыми пользуются для процедуры. При использовании диалога « Add Procedure » переключатель « Type » устанавливают в положение « Function » (см. рис. 3).
6.2. Передача аргументов в процедурах и функциях
Public Sub SubName(NumOne As DataType, NumTwo As DataType)
Использование аргументов в процедурах и функциях делает код более универсальным.
При использовании процедур и функций очень важно, чтобы передаваемые значения соответствовали типам данных аргументов и их порядку. Тем не менее, аргумент можно сделать необязательным, если поместить ключевое слово « Optional » перед его описанием в операторе объявления. Все аргументы, описанные после этого ключевого слова, также будут необязательными и все они должны иметь тип « Variant »:
Public Sub SubName(NumOne As DataType, Optional NumTwo)
Для облегчения передачи в подпрограмму аргументов их можно именовать. Именованный аргумент – это буквальное имя аргумента в подпрограмме. Чтобы передать в нее значения, нужно использовать имена аргументов и присвоить им значения с помощью символов «:=». Для процедуры :
Public Sub SubName(NumOne As Integer, NumTwo As String)
ее вызов с применением именованных аргументов выглядит следующим образом:
SubName ( NumTwo :=3, NumOne :=4)
Именованные аргументы можно указывать в произвольном порядке. Его соблюдение в данном случае необязательно.
При работе с аргументами можно использовать два необязательных ключевых слова: « ByVal » и « ByRef », записываемых для каждого параметра.
Ключевое слово « ByVal » предусматривает, что в аргумент может быть передано только одно конкретное значение (число, строка, но не массив!), при этом соответствие типов не является жестким и находится в рамках автоматического их преобразования.
Ключевое слово « ByRef » означает, что в аргумент может быть передан любой объект Visual Basic (числа, строки, массивы, классы и др.). Соответствие типа в этом случае является обязательным. Другой его особенностью является то, что возможна обратная связь при вызове подпрограммы: при изменении значения аргументов происходит соответствующее изменение переменных указанных в ее вызове.
При отсутствии ключевых слов « ByVal » и « ByRef » в описании аргументов подпрограммы всегда будет подразумеваться слово « ByRef ».
Иногда возникает необходимость досрочного выхода из процедуры или из функции, не дожидаясь ее окончания. Для этого пользуются операторами Exit :
При работе с процедурами и функциями важно помнить об областях видимости переменных. Они полностью подчиняются выше приведенным характеристикам из п. 2.1.
В целом смысл применения процедур и функции в программном коде приложения имеет два основных преимущества:
· Вызов одной и той же подпрограммы удовлетворяет множество запросов из разных частей программы.
· Чтобы каким-то образом усовершенствовать вычисления, не придется просматривать весь программный код. Достаточно лишь изменить его фрагмент внутри блока данной подпрограммы.
· Внутренние структуры подпрограммы можно сделать полностью локальными, не влияющими на остальную часть программного кода (инкапсуляция).
Контрольные вопросы для самопроверки
VBA-Урок 9. Процедуры и функции
Чтобы сделать процедуру доступной только в определенном модуле, используется ключевое слово Private:
Запуск процедуры с середины другой процедуры
Чтобы выполнить процедуру с середины другой процедуры, просто введите ее название.
Здесь есть очень простой пример:
Аргументы
Аргументы делают возможным использование значений из процедуры в под-процедуры (запомните, что по умолчанию, переменные являются доступны только по той процедуры, в которой они были объявлены).
К процедуре «warning» был добавлен аргумент, в данном случае это переменная «var_text» с типом «String» (строка):
Эта процедура требует аргумент, поэтому мы должны поставить значение после «warning», чтобы выполнить ее:
Когда мы хотим прописать несколько аргументов, тогда они должны быть отделены запятыми.
Необязательные аргументы
По умолчанию, если процедура имеет аргументы, то они должны быть обязательно проставлены, и если они не проставлены, тогда процедура не выполнится.
Теперь эта процедура может быть выполнена с или без опционального аргумента, как здесь:
Аргументы должны быть введены в правильном порядке.
Здесь есть пример, который использует два фрагмента кода, которые рассматривались выше:
См. рисунок ниже (пример 1):
Чтобы стало понятнее, ниже есть пример того, что произойдет, если макрос будет запущен на выполнение:
Ниже вы можете увидеть как предыдущий код и ByVal работают:
Функции
Основным отличием между процедурой и функцией является то, что функция возвращает значение.
Вот простой пример:
Функция может быть использована на рабочем листе, подобно любой другой функции в Excel.
Например, чтобы получить квадрат значения, которое введенное в ячейку A1:
Оператор 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
Оператор 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 и обратная связь.