Public sub vba что значит

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

Источник

VBA-Урок 9. Процедуры и функции

Чтобы сделать процедуру доступной только в определенном модуле, используется ключевое слово Private:

Запуск процедуры с середины другой процедуры

Чтобы выполнить процедуру с середины другой процедуры, просто введите ее название.

Здесь есть очень простой пример:

Аргументы

Аргументы делают возможным использование значений из процедуры в под-процедуры (запомните, что по умолчанию, переменные являются доступны только по той процедуры, в которой они были объявлены).

Public sub vba что значит. test. Public sub vba что значит фото. Public sub vba что значит-test. картинка Public sub vba что значит. картинка test

К процедуре «warning» был добавлен аргумент, в данном случае это переменная «var_text» с типом «String» (строка):

Эта процедура требует аргумент, поэтому мы должны поставить значение после «warning», чтобы выполнить ее:

Когда мы хотим прописать несколько аргументов, тогда они должны быть отделены запятыми.

Необязательные аргументы

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

Теперь эта процедура может быть выполнена с или без опционального аргумента, как здесь:

Аргументы должны быть введены в правильном порядке.

Здесь есть пример, который использует два фрагмента кода, которые рассматривались выше:

См. рисунок ниже (пример 1):

Public sub vba что значит. test2. Public sub vba что значит фото. Public sub vba что значит-test2. картинка Public sub vba что значит. картинка test2

Чтобы стало понятнее, ниже есть пример того, что произойдет, если макрос будет запущен на выполнение:

Ниже вы можете увидеть как предыдущий код и ByVal работают:

Функции

Основным отличием между процедурой и функцией является то, что функция возвращает значение.

Вот простой пример:

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

Например, чтобы получить квадрат значения, которое введенное в ячейку A1:

Источник

Объясните в чем разница

Public sub vba что значит. noavatar32. Public sub vba что значит фото. Public sub vba что значит-noavatar32. картинка Public sub vba что значит. картинка noavatar32

1 ответ

Public sub vba что значит. noavatar32. Public sub vba что значит фото. Public sub vba что значит-noavatar32. картинка Public sub vba что значит. картинка noavatar32

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

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

Синтаксис инструкции Sub содержит следующие элементы:

Аргумент списокАргументов имеет следующий синтаксис и элементы:

[Optional] [ByVal | ByRef] [ParamArray] имяПеременной[( )] [As тип] [= поУмолчанию]

Процедуры 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.

Источник

Процедуры (Visual Basic)

При каждом вызове процедуры выполняются ее операторы, начиная с первого исполняемого оператора после Sub инструкции и заканчивая первой End Sub Exit Sub Return инструкцией, или.

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

Синтаксис объявления

Синтаксис для объявления Sub процедуры выглядит следующим образом:

В modifiers можно указать уровень доступа и сведения о перегрузке, переопределении, совместном использовании и затенении. Дополнительные сведения см. в разделе оператор подраздела.

Объявление параметра

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

Для каждого параметра в списке параметров используется следующий синтаксис:

Если параметр является необязательным, необходимо также указать значение по умолчанию в составе объявления. Для указания значения по умолчанию используется следующий синтаксис:

Параметры как локальные переменные

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

Синтаксис вызова

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

Для вызова Sub процедуры используется следующий синтаксис:

Метод можно вызвать Sub извне класса, который его определяет. Во-первых, необходимо использовать New ключевое слово для создания экземпляра класса или вызвать метод, возвращающий экземпляр класса. Дополнительные сведения см. в разделе оператор New. Затем можно использовать следующий синтаксис, чтобы вызвать Sub метод для объекта экземпляра:

Иллюстрация объявления и вызова

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

Источник

Процедуры «Function» и «Sub» в VBA

Встроенные функции VBA

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

Список этих функций можно посмотреть в редакторе VBA:

Кроме того, полный список встроенных функций VBA с примерами можно найти на сайте Visual Basic Developer Centre.

Пользовательские процедуры «Function» и «Sub» в VBA

В Excel Visual Basic набор команд, выполняющий определённую задачу, помещается в процедуру Function (Функция) или Sub (Подпрограмма). Главное отличие между процедурами Function и Sub состоит в том, что процедура Function возвращает результат, процедура Sub – нет.

Поэтому, если требуется выполнить действия и получить какой-то результат (например, просуммировать несколько чисел), то обычно используется процедура Function, а для того, чтобы просто выполнить какие-то действия (например, изменить форматирование группы ячеек), нужно выбрать процедуру Sub.

Аргументы

При помощи аргументов процедурам VBA могут быть переданы различные данные. Список аргументов указывается при объявлении процедуры. К примеру, процедура Sub в VBA добавляет заданное целое число (Integer) в каждую ячейку в выделенном диапазоне. Передать процедуре это число можно при помощи аргумента, вот так:

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

Необязательные аргументы

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

Возвращаясь к предыдущему примеру, чтобы сделать целочисленный аргумент функции необязательным, его нужно объявить вот так:

В таком случае целочисленный аргумент i по умолчанию будет равен 0.

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

Передача аргументов по значению и по ссылке

Аргументы в VBA могут быть переданы процедуре двумя способами:

При помощи ключевых слов ByVal или ByRef в объявлении процедуры можно задать, каким именно способом аргумент передаётся процедуре. Ниже это показано на примерах:

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

Помните, что аргументы в VBA по умолчанию передаются по ссылке. Иначе говоря, если не использованы ключевые слова ByVal или ByRef, то аргумент будет передан по ссылке.

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

VBA процедура «Function»

Редактор VBA распознаёт процедуру Function, когда встречает группу команд, заключённую между вот такими открывающим и закрывающим операторами:

Как упоминалось ранее, процедура Function в VBA (в отличие от Sub), возвращает значение. Для возвращаемых значений действуют следующие правила:

Это отлично проиллюстрировано в следующем примере.

Пример VBA процедуры «Function»: Выполняем математическую операцию с 3 числами

Ниже приведён пример кода VBA процедуры Function, которая получает три аргумента типа Double (числа с плавающей точкой двойной точности). В результате процедура возвращает ещё одно число типа Double, равное сумме первых двух аргументов минус третий аргумент:

Эта очень простая VBA процедура Function иллюстрирует, как данные передаются процедуре через аргументы. Можно увидеть, что тип данных, возвращаемых процедурой, определён как Double (об этом говорят слова As Double после списка аргументов). Также данный пример показывает, как результат процедуры Function сохраняется в переменной с именем, совпадающим с именем процедуры.

Вызов VBA процедуры «Function»

Если рассмотренная выше простая процедура Function вставлена в модуль в редакторе Visual Basic, то она может быть вызвана из других процедур VBA или использована на рабочем листе в книге Excel.

Вызов VBA процедуры «Function» из другой процедуры

Процедуру Function можно вызвать из другой VBA процедуры при помощи простого присваивания этой процедуры переменной. В следующем примере показано обращение к процедуре SumMinus, которая была определена выше.

Вызов VBA процедуры «Function» из рабочего листа

VBA процедуру Function можно вызвать из рабочего листа Excel таким же образом, как любую другую встроенную функцию Excel. Следовательно, созданную в предыдущем примере процедуру FunctionSumMinus можно вызвать, введя в ячейку рабочего листа вот такое выражение:

VBA процедура «Sub»

Редактор VBA понимает, что перед ним процедура Sub, когда встречает группу команд, заключённую между вот такими открывающим и закрывающим операторами:

VBA процедура «Sub»: Пример 1. Выравнивание по центру и изменение размера шрифта в выделенном диапазоне ячеек

Рассмотрим пример простой VBA процедуры Sub, задача которой – изменить форматирование выделенного диапазона ячеек. В ячейках устанавливается выравнивание по центру (и по вертикали, и по горизонтали) и размер шрифта изменяется на заданный пользователем:

Данная процедура Sub выполняет действия, но не возвращает результат.

В этом примере также использован необязательный (Optional) аргумент iFontSize. Если аргумент iFontSize не передан процедуре Sub, то его значение по умолчанию принимается равным 10. Однако же, если аргумент iFontSize передается процедуре Sub, то в выделенном диапазоне ячеек будет установлен размер шрифта, заданный пользователем.

VBA процедура «Sub»: Пример 2. Выравнивание по центру и применение полужирного начертания к шрифту в выделенном диапазоне ячеек

Следующая процедура похожа на только что рассмотренную, но на этот раз, вместо изменения размера, применяется полужирное начертание шрифта в выделенном диапазоне ячеек. Это пример процедуры Sub, которой не передаются никакие аргументы:

Вызов процедуры «Sub» в Excel VBA

Вызов VBA процедуры «Sub» из другой процедуры

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

Если процедура Format_Centered_And_Sized имеет более одного аргумента, то они должны быть разделены запятыми. Вот так:

Вызов VBA процедуры «Sub» из рабочего листа

Процедура Sub не может быть введена непосредственно в ячейку листа Excel, как это может быть сделано с процедурой Function, потому что процедура Sub не возвращает значение. Однако, процедуры Sub, не имеющие аргументов и объявленные как Public (как будет показано далее), будут доступны для пользователей рабочего листа. Таким образом, если рассмотренные выше простые процедуры Sub вставлены в модуль в редакторе Visual Basic, то процедура Format_Centered_And_Bold будет доступна для использования на рабочем листе книги Excel, а процедура Format_Centered_And_Sized – не будет доступна, так как она имеет аргументы.

Вот простой способ запустить (или выполнить) процедуру Sub, доступную из рабочего листа:

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

Внимание: Назначая сочетание клавиш для макроса, убедитесь, что оно не используется, как стандартное в Excel (например, Ctrl+C). Если выбрать уже существующее сочетание клавиш, то оно будет переназначено макросу, и в результате пользователь может запустить выполнение макроса случайно.

Область действия процедуры VBA

В части 2 данного самоучителя обсуждалась тема области действия переменных и констант и роль ключевых слов Public и Private. Эти ключевые слова так же можно использовать применительно к VBA процедурам:

Если перед объявлением процедуры стоит ключевое слово Public, то данная процедура будет доступна для всех модулей в данном проекте VBA.Если перед объявлением процедуры стоит ключевое слово Private, то данная процедура будет доступна только для текущего модуля. Её нельзя будет вызвать, находясь в любом другом модуле или из рабочей книги Excel.

Помните о том, что если перед объявлением VBA процедуры Function или Sub ключевое слово не вставлено, то по умолчанию для процедуры устанавливается свойство Public (то есть она будет доступна везде в данном проекте VBA). В этом состоит отличие от объявления переменных, которые по умолчанию бывают Private.

Ранний выход из VBA процедур «Function» и «Sub»

Если нужно завершить выполнение VBA процедуры Function или Sub, не дожидаясь её естественного финала, то для этого существуют операторы Exit Function и Exit Sub. Применение этих операторов показано ниже на примере простой процедуры Function, в которой ожидается получение положительного аргумента для выполнения дальнейших операций. Если процедуре передано не положительное значение, то дальнейшие операции не могут быть выполнены, поэтому пользователю должно быть показано сообщение об ошибке и процедура должна быть тут же завершена:

Обратите внимание, что перед тем, как завершить выполнение процедуры FunctionVAT_Amount, в код вставлена встроенная VBA функция MsgBox, которая показывает пользователю всплывающее окно с предупреждением.

Источник

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

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