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

Private sub vba что это

  • автор:

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

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

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

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

Объясните в чем разница между:
Sub
Private Sub
Public Sub
У нас прописанны макросы несколькими людьми, и каждый делает по-своему. И я заметил что некоторые макросы работают довольно странно. Главна странность в том, что при запуске некотрых макросов эксель открывает еще какой-нить файл.

1 ответ

18 февраля 2012 года
985 / / 19.09.2004

Инструкция Sub

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

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

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

ЭлементОписание

Public — Необязательный. Указывает, что процедура Sub доступна для всех других процедур во всех модулях. При использовании в личном модуле (модуле, который содержит инструкцию Option Private) такая процедура является недоступной вне проекта.

Private — Необязательный. Указывает, что процедура Sub доступна для других процедур только того модуля, в котором она описана.

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

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

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

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

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

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

ЭлементОписание

Optional — Необязательный. Ключевое слово, указывающее, что аргумент не является обязательным. При использовании этого элемента все последующие аргументы, которые содержит списокАргументов, также должны быть необязательными и быть описаны с помощью ключевого слова Optional. Все аргументы, описанные как Optional, должны иметь тип Variant. Не допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray.

ByVal — Необязательный. Указывает, что этот аргумент передается по значению.

ByRef — Необязательный. Указывает, что этот аргумент передается по ссылке. Описание ByRef используется в Visual Basic по умолчанию.

ParamArray — Необязательный. Используется только в качестве последнего элемента в списке списокАргументов для указания, что конечным аргументом является описанный как Optional массив значений типа Variant. Ключевое слово ParamArray позволяет задавать произвольное количество аргументов. Оно не может быть использовано со словами ByVal, ByRef или Optional.

имяПеременной — Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.

тип — Необязательный. Тип данных аргумента, переданного в процедуру; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только строки переменной длины), Object, Variant. Если отсутствует ключевое слово Optional, могут быть также указаны определяемый пользователем тип или объектный тип.

поУмолчанию — Необязательный. Любая константа или выражение, дающее константу. Используется только вместе с параметром Optional. Если указан тип Object, единственным значением по умолчанию может быть значение Nothing.

Дополнительные сведения

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

Справка © Microsoft Excel 97

P.S. Открытие других файлов может входить в задачу макроса, кроме того, макрос может изначально находиться в другой рабочей книге, в таком случае, при его вызове, рабочая книга, разумеется, откроется ()

Private sub vba что это

Активация окна. Вызывается в момент активации книги. Этот момент наступает в тот момент, когда из другой активной книги вы переходите к той, в которой обрабатывается событие. Например, при переключении книги в меню «Окно».

Private Sub Workbook_Activate() End Sub

Закрытие окна. Вызывается перед закрытием книги:

Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub

Деактивация книги. Вызывается в момент перехода к другой книге:

Private Sub Workbook_Deactivate() End Sub

Активация листа. Вызывается в момент смены листа:

Private Sub Workbook_SheetActivate(ByVal Sh As Object) End Sub

Деактивация листа. Вызывается в момент смены листа для того листа, с которого уходят:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) End Sub

Смена ячейки. Вызывается в момент смены диапазона или при редактировании ячейки:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range) End Sub

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

Private Sub Workbook_SheetCalculate(ByVal Sh As Object) End Sub

Переход к ячейке. Вызывается при переходе от одной ячейки к другой:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range) End Sub

Разрешение на печать. Вызывается при выборе меню «Печать»:

Private Sub Workbook_BeforePrint(Cancel As Boolean) End Sub

Разрешение на сохранение. Вызываеться перед сохранением документа:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub

Создание нового листа. Вызывается в момент создания нового листа. Обычно ведет за собой целую цепочку событий — Workbook_NewSheet, Workbook_SheetDeactivate, Workbook_SheetActivate:

Private Sub Workbook_NewSheet(ByVal Sh As Object) End Sub

Изменение размера листа. Вызывается в момент изменения размера листа:

Private Sub Workbook_WindowResize(ByVal Wn As Excel.Window) End Sub

Активизация окна. Вызывается в момент активизации окна книги, например, при переключении на книгу:

Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window) End Sub

Щелчок правой кнопкой. Вызывается по нажатию правой кнопки мыши:

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Excel.Range, Cancel As Boolean) End Sub

Выводы. Часть событий связана в цепочки. То есть, например, событие Activate для одного объекта это событие Deactivate для другого объекта. Это работает для Окон, Книг и Листов. Часть событий вызывают за собой следующие события, например, ввод данных приведет к пересчету листа. Или вставка нового листа к событиям активизации. Знание событий может помочь в решении нетривиальных вопросов. Вот так можно запретить печать книги.

Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True End Sub

Процедуры типа 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, и возможно, но не

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

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