Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel процедуры

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

Public — Private

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

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

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

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

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

Аргументы

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

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

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

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

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

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

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

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

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

Чтобы протестировать, присутствует ли опциональный аргумент в процедуре, мы используем функцию IsMissing . Эта функция совместима только с некоторыми типами функций (типа Variant) и это является решающим, так как тип необязательно аргументов не был указан в объявлении (необъявленный тип = Variant).

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

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

ByRef — ByVal

По умолчанию, аргументы имеют тип ByRef , что означает: если переменная передается как аргумент, ссылка на нее будет также передаваться. Иными словами, если переменная была изменена другой под-процедурой, то она также будет изменена во внешней процедуре, которая вызывает эту под-процедуру.

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

Второй метод заключается в использовании ByVal .

В отличие от ByRef , который передает ссылки (ярлык), ByVal передает значение, которое означает, что значение передано как аргумент не было изменено.

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

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

Функции

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

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

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

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

Урок 7 по VBA — Процедуры

В отличии от языка VBScript, VBA процедуры классифицируются не на два типа (процедура-функция и процедура-подпрограмма), а четырех типов: процедура-функция, процедура-подпрограмма, процедура свойств и обработка событий. Также существуют некоторые дополнения в плане передачи параметров (по значению или по ссылке). Третьим моментом является область видимости – в VBA вызов процедуры может осуществляться как в пределах текущего модуля (макроса), так и за его пределами – во всех проектах. Все это обусловлено тем, что VBA – это не столько язык программирования, сколько программный пакет, с возможностью создания форм и проектов.

Давайте сначала кратко рассмотрим типы VBA процедур:

Подпрограммы – блоки кода заключенные в конструкцию Sub …. End Sub. Сама по себе подпрограмма не возвращает никакого значения, а просто выполняет прописанные в ней команды.

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

Помимо этого, стоит упомянуть про обработку событий (нажатие кнопки клавиатуры или перемещение мыши) и доступ к объектам, но это отдельная тема.

VBA процедуры типа Sub – подпрограммы

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

Sub ИмяПодпрограмм([аргументы])
Операторы
[Exit Sub]
операторы
End Sub

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

Вызов VBA процедуры осуществляется с помощью ключевого слова call, например, Call MySub.

Давайте напишем простой пример: добавьте в проект новую форму и новый модуль. На поверхность формы добавьте два текстовых поля (TextBox), одну метку (Label) и одну кнопку (CommandButton). Создайте связь между формой и модулем, прописав в редакторе кода для модуля:

Я назвал форму SubForm, а модуль – SubModule, за имя отвечает свойство Name.

Теперь в редакторе кода для формы пропишите:

Тут все предельно просто, вначале мы объявили процедуру Hipotenuze, которой будут передаваться два аргумента, далее происходит проверка на нулевые значения. Вызов происходит при нажатии на кнопку, находящуюся на форме, параметрами будут значения, хранящиеся в текстовых полях TextBox1 и TextBox2. Результат отображается в метке Label1.

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

Sub MySub (a As Integer, b As String) … End Sub

Static – данное ключевое слово, прописанное перед ключевым словом Sub позволяет сохранять в памяти значения всех переменных после выполнения процедуры. Его мы рассматривали в с статье – переменные VBA.

ParamArray – данное ключевое слово позволяет передавать процедуре переменное количество параметров, оно может использоваться только для последнего элемента в списке аргументов.

ParamArray нельзя использовать вместе со словами ByRef, ByVal или Optional, например:

Как видим, мы фактически с помощью ParamArray показываем, что передаем массив, для его обработки мы использовали оператор For …. Each. Тут мы передали при вызове VBA процедуры пять параметров, при этом, первый будет храниться в аргументе a, а остальные в аргументе b, который обрабатывается как массив.

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

В данном примере на поверхности формы находится всего одна метка и три кнопки. Каждая из кнопок будет производить VBA вызов процедуры MyArguments с различными значениями.

Читать еще:  C open excel file

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

Что бы все стало понятно, рассмотрим следующий пример:

MySub1 – тут происходит объявление переменной MyVar и присвоение ей значения 100, далее в теле происходит вызов VBA процедуры MySumm1, ей в качестве параметры мы передаем значение переменной MyVar – 100. Сама процедура MySumm принимает значение по ссылке, на что указывает ключевое слово ByRef, к принятому значению прибавляется число 100. Стоит обратить внимание, что ByRef можно было и не писать. После VBA вызова процедуры MySumm1 происходит запись значения переменной MyVar в свойство Caption объекта Label1, в итоге, отобразится число 200.

MySub2 – аналог предыдущей процедуры, но тут происходит вызов MySumm2, в которой происходит передача параметров по значению, о чем говорит ключевое слово ByVal, в итоге, значение переменной MyVar не изменится.

VBA процедуры типа Function – функции

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

Function ИмяФункции ([аргументы]) [As ТипДанных]
Операторы
[Exit Function]
Операторы
[ИмяФункции=Выражение]
End Function

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

Спасибо за внимание. Автор блога Владимир Баталий

Канал в Telegram

Вы здесь

Выполнение процедур в VBA

Ранее, с запуском процедур из меню «Макросы» мы уже сталкивались. Так же, мы уже назначали нашим процедурам горячие клавиши. Теперь поговорим о еще нескольких способах запуска процедур в VBA.

Выполнение процедур из пользовательского меню Excel

Этот способ позволяет нам создать свои элементы в пользовательских меню и назначить этим элементам макросы т.е. процедуры. Ниже приводится первый способ создания элемента меню и привязку к нему макроса. Данный способ использовать не предпочтительно т.к. отсутствует гибкость, при переходе на другую рабочую станцию (ПК) элементы придется создавать и настраивать повторно. Со вторым способом, а именно с программным созданием панелей меню и подключением их как надстройки, мы поговорим в следующих статьях, ну а для создания простенького меню из одного- двух элементов смотрим способ ниже.

Итак, допустим, нам необходимо запускать простенькую процедуру, которая возвращает: Имя пользователя и Текущие время и дату ПК в сообщении. Код процедуры:

Sub GetUserDate()
Dim msg As String
msg = «Пользователь: » & Environ(«UserName») & Chr(13) _
& «Текущая дата и время: » & Now
‘Environ(«UserName») возвращает имя текущего пользователя
‘ Now — возвращает дату и время ПК
MsgBox msg
End Sub

Для запуска этой процедуры из пользовательского меню, проделываем следующее:
1. Выберите команду Вид — Панели инструментов — Настройка. В открывшемся окне «Настройка«, перейдите на вкладку «Команды«, и в «Категории» найдите строчку «Макросы«

Обратите внимание. При открытом окне «Настройка», Вы можете изменить любой пункт меню, как панелей, так и выпадающих меню.

2. Перетащите методом Drag & Drop из списка «Команды«, элемент который называется «Настраиваемая команда меню«, в нижнюю часть меню «Данные«, расположив его после элемента «Обновить данные«.

3. Щелкните правой кнопкой мыши на новом пункте меню «Настраиваемая команда меню» и в контекстном меню, в поле Имя введите название пункта меню «&Имя пользователя и дата»

4. Теперь нам остается только связать нашу процедуру (макрос) с этим пунктом. Для этого, в контекстном меню настройки элемента «Настраиваемая команда меню» т.е. уже «Имя пользователя и дата», выбираем пункт «Назначить макрос» и выбираем нашу процедуру из списка:

Все. Жмем ОК и закрываем окно «Настройка». Тестируем, меню Данные — Имя пользователя и дата, получаем сообщение:

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

Выполнение процедуры из другой процедуры

Самый распространенный способ вызова (выполнения) процедуры это вызов процедуры из другой процедуры. Существует три способа вызова:

  1. Ввод названия процедуры и ее аргументы через запятую (если есть аргументы). Самый распространенный способ. В прошлых статьях мы уже вызывали таким способом процедуры, например «Создание расширенного списка выбора».
  2. Ввод ключевого слова Call, после, ввод названия процедуры и аргументов, только в этом случае, аргументы необходимо заключить в скобки.
  3. Вызов с использованием метода Run объекта Application. Этот способ можно применить и для выполнения других процедур VBA. С помощью метода Run можно выполнить процедуру, имя которой присвоено в переменной. В этом случае в метод Run переменная передается как аргумент.

Рассмотрим каждый способ на примерах. Для этого создадим в модуле с созданной ранее процедурой GetUserDate, вызывающую процедуру CallProc.

Способ 1.

Sub CallProc()
GetUserDate
End Sub

Способ 2.

Sub CallProc()
Call GetUserDate [арг_1, арг_2]
End Sub

Т.к. наша процедура GetUserDate не имеет входных аргументов, то вызываем ее без них. арг_1, арг_2 даны для примера. В правилах хорошего тона, вызов процедур правильнее делать вторым способом т.к. это явно указывает на вызов другой процедуры, но необязательно. Сознаюсь честно, сам ленивый и постоянно использую первый способ :).

Способ 3.

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

Sub Работаем()
MsgBox «Пашем! Суббота еще не скоро!»
End Sub

Sub Отдыхаем()
MsgBox «Ура! Выходные!»
End Sub

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

Dim SubToCall As String ‘переменная содержащая имя процедуры

Select Case Weekday(Now, vbMonday)
Case 1 To 5: SubToCall = «Работаем»
Case 6 To 7: SubToCall = «Отдыхаем»
End Select

Обратите внимание, имя вызываемой процедуры присваивается в текстовую переменную SubToCall в виде обычной текстовой строки. Функция Weekday определяет по текущей дате (которая возвращена встроенной функцией Now) день недели, который проверяется в Case-селекторе (по работе с Case читаем здесь ) и в соответствии с возращенным номером дня недели присваивает в переменную SubToCall строку, содержащую имя процедуры, которую необходимо вызвать. Далее в Application.Run передаем SubToCall как аргумент. Хочу обратить внимание на функцию Weekday — функция имеет еще второй необязательный параметр, который определяет, с какого дня недели вести счет дней. По умолчанию, счет ведется с воскресенья, поэтому константа vbMonday, в нашем примере, указывает функции, что счет необходимо начать с понедельника.

Читать еще:  Find vba excel описание

Вызов процедуры из другого модуля

VBA — язык не привередлив и снисходителен ко многим моментам, например, описание переменных (по этому поводу читайте здесь ). Тоже относится и к вызову процедур, содержащихся в разных модулях. Процедуры могут быть Public или Private (что это значит, можете ознакомиться в статье по области видимости переменных). Так вот, в случае с приватными процедурами, вызов их может происходить только в рамках общего модуля т.е. процедуры (вызываемая и вызывающая) должны находится в одном и том же модуле. Если же вызываемая процедура описана как Public, тогда она становится доступной, для вызывающих процедур, во всех модулях. В случае с Public возможно повторение имен процедур в разных модулях, но вот с вызовом будут проблемы, работа закончится с ошибкой Run-time error 1004: «Не найден макрос…» т.е. интерпретатор, в рамках всего проекта, нашел несколько доступных процедур с одинаковым именем, но не понял какую из них вызвать. Для того чтобы это избежать необходимо явно указать путь к данной процедуре. Это делается довольно просто и привычно для объектно-ориентированных языков, т.е. мы указываем название модуля, содержащего процедуру, ставим точку, и нам предлагается список всех доступных процедур (функций) или глобальных переменных. Например, Module2 содержит процедуру типа Public с именем Test. Для того чтобы ее вызвать из Module1 необходимо написать: Module2.Test.

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

Ну, а на этом все. В следующей статье еще захвачу один способ, это вызов процедур из других книг. А пока – пока!

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

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

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

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

  • Откройте рабочую книгу Excel и запустите редактор VBA (нажмите для этого Alt+F11), и затем нажмите F2.
  • В выпадающем списке в верхней левой части экрана выберите библиотеку VBA.
  • Появится список встроенных классов и функций VBA. Кликните мышью по имени функции, чтобы внизу окна отобразилось её краткое описание. Нажатие F1 откроет страницу онлайн-справки по этой функции.

Кроме того, полный список встроенных функций 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 – передача аргумента по ссылке. То есть процедуре передаётся фактический адрес размещения аргумента в памяти. Любые изменения, сделанные с аргументом внутри процедуры, будут сохранены при выходе из процедуры.

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

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

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

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

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

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

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

  • Тип данных возвращаемого значения должен быть объявлен в заголовке процедуры Function.
  • Переменная, которая содержит возвращаемое значение, должна быть названа так же, как и процедура Function. Эту переменную не нужно объявлять отдельно, так как она всегда существует как неотъемлемая часть процедуры Function.
Читать еще:  Vba excel прервать цикл

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

Пример 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, доступную из рабочего листа:

  • Нажмите Alt+F8 (нажмите клавишу Alt и, удерживая её нажатой, нажмите клавишу F8).
  • В появившемся списке макросов выберите тот, который хотите запустить.
  • Нажмите Выполнить (Run)

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

  • Нажмите Alt+F8.
  • В появившемся списке макросов выберите тот, которому хотите назначить сочетание клавиш.
  • Нажмите Параметры (Options) и в появившемся диалоговом окне введите сочетание клавиш.
  • Нажмите ОК и закройте диалоговое окно Макрос (Macro).

Внимание: Назначая сочетание клавиш для макроса, убедитесь, что оно не используется, как стандартное в 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, которая показывает пользователю всплывающее окно с предупреждением.

Ссылка на основную публикацию
Adblock
detector