Перейти к содержимому

Public sub что это

  • автор:

Вложенные процедуры (Visual Basic)

Процедура Sub — это ряд операторов Visual Basic, заключенных в операторы Sub и End Sub . Процедура Sub выполняет задачу, а затем возвращает управление вызывающему коду, но не возвращает значение вызывающему коду.

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

Процедуру Sub можно определить в модулях, классах и структурах. По умолчанию он имеет значение Public , то есть его можно вызывать из любого места в приложении с доступом к модулю, классу или структуре, в которой они определены. Термин метод описывает процедуру Sub или Function , доступ к которому осуществляется извне своего модуля, класса или структуры. Дополнительные сведения см. в разделе Procedures in Visual Basic (Процедуры в Visual Basic).

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

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

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

[modifiers] Sub SubName[(parameterList)] ' Statements of the Sub procedure. End Sub 

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

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

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

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

[Optional] [ByVal | ByRef] [ParamArray] parameterName As DataType 

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

Optional [ByVal | ByRef] parameterName As DataType = defaultValue 

Параметры в качестве локальных переменных

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

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

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

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

[Call] SubName[(argumentlist)] 

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

object.MethodName[(argumentList)] 

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

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

Sub tellOperator(ByVal task As String) Dim stamp As Date stamp = TimeOfDay() MsgBox("Starting " & task & " at " & CStr(stamp)) End Sub 

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

tellOperator("file update") 

См. также раздел

  • Процедуры
  • Процедуры функций
  • Процедуры свойств
  • Процедуры операторов
  • Параметры и аргументы процедуры
  • Оператор Sub
  • Практическое руководство. Вызов процедуры, которая не возвращает значение
  • Практическое руководство. Вызов обработчика событий в Visual Basic

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Процедуры типа Function

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

Вот пример процедуры типа Function:

Public Function ДеФункция(х As Integer, y As Integer )

Dim Z AS Integer

ДеФункция = x ? z

Очевидно, строение процедуры типа Function очень похоже на строение процедуры типа Sub. Объявление начинается с необязательного ключевою слова, определяющего область видимости процедуры (в данном случае это Public). Далее идет ключевое слово Function, определяющее тип процедуры, за ним размещается имя процедуры и, наконец, ее аргументы. Аргументы будут обсуждаться в разделе Привлекательные аргументы, но уже на этом примере вы видите, как они используются. Подобно процедуре типа Sub, в конце процедуры типа Function находится завершающий оператор End Function.

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

Единственным различием между функциями и процедурами типа Function является то, что для функций вам не нужно печатать программный код! Обзор функций, доступных в VBA, вы найдете в главе 11.

Отличия процедур типа Function от процедур типа Sub

Между процедурами типа Function и типа Sub есть одно существенное отличие: в процедуре типа Function обязательно где-то должен присутствовать по крайней мере один оператор, задающий значение этой функции. При этом используется имя процедуры, как будто это обычная переменная. В предыдущем примере присвоение значения осуществляется в строке ДеФункция = х ? z. После того как программный код в этой строке будет выполнен, ДеФункция будет содержать значение, которое возвратится в вызывающую процедуру для дальнейшего использования там.

Читайте также

Объект Function

Объект Function С помощью объекта Function можно манипулировать функцией как объектом. Этот объект содержит ряд специфичных методов и свойств (табл. 11.21 и 11.22).Таблица 11.21. Свойства объекта Function Таблица 11.22. Методы объекта Function Синтаксис определения объекта Function выглядит

function — Создает новую функцию

function — Создает новую функцию functionОпределяет набор операторов, которые вы определили для выполнения определенной задачи. Вы можете декларировать (declare), или определить (define), функцию в том же месте, где вы ее вызываете, или в любом другом месте муви-клипа. При определении

EXTERNAL FUNCTION DIRECTORY

EXTERNAL FUNCTION DIRECTORY Параметры в ibconfig EXTERNAL_FUNCTION_DIRECTORY <quoted directory string>EXTERN

EnumObjects function EnumObjects(DC: HDC, ObjectType: Integer; ObjectFunc: TFarProc; Data:

EnumObjects function EnumObjects(DC: HDC, ObjectType: Integer; ObjectFunc: TFarProc; Data: Pointer):Integer;Пеpечисляет типы объектов, возможные на устpойстве, пеpедавая функции обpатного вызова TLogPen или TLogBrush и Data. Пеpечисление заканчивается, если функция обpатного вызова возвpащает нуль или если пеpечислены все

2. Процедуры и функции для переменных строкового типа

2. Процедуры и функции для переменных строкового типа 1. Function Copy(S: String; Index, Count: Integer): String; Возвращает подстроку строки. S – выражение типа String.Index и Count – выражения целого типа. Функция возвращает строку, содержащую Count символов, начинающихся с позиции Index. Если Index больше, чем

Процедуры типа Sub

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

Элементы объявления процедуры типа Sub

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

Отличия процедур типа Function от процедур типа Sub

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

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

Вызов процедур типа Function Процедуру типа Function можно выполнить, только вызвав ее из другой процедуры.Как правило, это делается путем присваивания имени данной функции некоторой переменной. В следующем примере переменная ZСтепень получает значение, возвращенное

Реализация паттерна «Стратегия» посредством класса tr::function

Реализация паттерна «Стратегия» посредством класса tr::function Если вы привыкли к шаблонам и их применению для построения неявных интерфейсов (см. правило 41), то применение указателей на функции покажется вам не слишком гибким решением. Почему вообще для вычисления

5.2.3. Синтаксис DROP PROCEDURE и DROP FUNCTION

5.2.3. Синтаксис DROP PROCEDURE и DROP FUNCTION DROP [IF EXISTS] sp_nameЭта инструкция используется, чтобы удалить сохраненную процедуру или функцию. То есть определенная подпрограмма будет удалена с сервера. Начиная с MySQL 5.0.3, Вы должны иметь привилегию ALTER ROUTINE для подпрограммы. Такая

Адаптеры функций (Function adaptors)

Адаптеры функций (Function adaptors) Функциональные адаптеры работают только с классами функциональных объектов с определёнными типами параметров и типом

11. Строковый тип в Pascal. Процедуры и функции для переменных строкового типа

11. Строковый тип в Pascal. Процедуры и функции для переменных строкового типа Последовательность символов определенной длины называется строкой. Переменные строкового типа определяются путем указания имени переменной, зарезервированного слова string, и возможно, но не

Процедуры типа Sub

Термин процедура типа Sub кажется мне довольно неуклюжим, но он достаточно точно отражает суть дела. В некоторых языках программирования суб процедурам и, или подпрограммами, называются процедуры, вызываемые главными процедурами. В VBA, хотя процедуры типа Sub и могут вызываться другими процедурами, главная процедура программы всегда является процедурой типа 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. Процедуры

3.2. Процедуры Пример 1.8: Процедура вычисляет корни квадратного уравненияAX2+BX+C=0PROGRAM KU (INPUT, OUTPUT);VAR A, B, C, D, X1, X2 : REAL;PROCEDURE KVUR (A, B, C: REAL; VAR D, X1, X2: REAL); BEGIN D:=SQR (B) -4*A*C; IF D = 0 THEN X1:= (-B) / (2*A) ELSE IF D> 0 THEN BEGIN X1:= ((-B) – SQRT (D)) / (2*A); X2:= ((-B) + SQRT (D)) / (2*A) END END; BEGINWRITE (‘Введите A=’);READLN (A);WRITE (‘Введите

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 Процедура типа Function, в принципе, работает так же, как и процедура типа Sub, но в данном случае ее главная задача — вычисление некоторого значения. Когда процедура типа Function завершит свою работу, она возвратит это значение в вызывающую процедуру, которая

Отличия процедур типа Function от процедур типа Sub

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

11. Строковый тип в Pascal. Процедуры и функции для переменных строкового типа

11. Строковый тип в Pascal. Процедуры и функции для переменных строкового типа Последовательность символов определенной длины называется строкой. Переменные строкового типа определяются путем указания имени переменной, зарезервированного слова string, и возможно, но не

Оператор Sub

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

Синтаксис

[ Частный | Общественного | Друг ] [ Static ] Subname [ ( 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 [ ( ) ] [ Astype ] [ =defaultvalue ]

Part Описание
Необязательное Необязательный параметр. Ключевое слово, которое указывает, что аргумент не является обязательным. Если используется, все последующие аргументы в списке ресурсов также должны быть необязательными и объявляться с помощью ключевого слова Optional . Optional не может использоваться для каких-либо аргументов, если используется ParamArray.
ByVal Необязательный параметр. Указывает, что аргумент передается значением.
ByRef Необязательный параметр. Указывает, что аргумент передается по ссылке. ByRef является значением по умолчанию в Visual Basic.
ParamArray Необязательный параметр. Используется только в качестве последнего аргумента в списке ресурсов , чтобы указать, что окончательный аргумент является необязательныммассивом элементов Variant . Ключевое слово ParamArray позволяет предоставлять произвольное число аргументов. Ключевое слово ParamArray не может использоваться с аргументами ByVal, ByRef или Optional.
варнаме Обязательно. Имя переменной, представляющее аргумент; соответствует стандарту соглашений об именовании переменных.
type Необязательный параметр. Тип данных аргумента, передаваемого процедуре; Может быть byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только переменная длина), Object, Variant или определенный тип объекта. Если параметр не является Optional, может быть указан определяемый пользователем тип.
Defaultvalue Необязательный параметр. Любая константа или константное выражение. Действительно только для параметров Optional. Если типом является Object, явным значением по умолчанию может быть только Nothing.

Замечания

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

' 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 и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

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

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