В предыдущих уроках мы уже работали с процедурами в VBA, когда рассматривали примеры кода и запускали выполнение написанных программ. И вот сейчас, пришло время более детально изучить данную тему.
Процедура VBA – это именованная, сохраняемая в модуле программа, состоящая из некоторой последовательности операторов, которые выполняют определённые действия с разными объектами. Это наименьшая единица программного кода в VBA.
Как правило, программный код VBA представляет из себя совокупность процедур, каждая из которых решает конкретную задачу.
В модуле может храниться неограниченное количество процедур.
Типы процедур в VBA
- Процедура типа Sub (подпрограмма) – это независимая часть программы, которая выполняет определённый блок операторов. Одна процедура типа Sub может вызывать (выполнять) другую.
- Процедура типа Function (функция) выполняет заданные вычисления и возвращает результат в виде значения, которое присваивается переменной с именем данной функции. Функцию можно вызывать из другой процедуры.
- Процедура типа Property (процедура свойств) определяет значение свойств объекта определённого пользователем класса.
- Процедура обработки события (event procedure) – это процедура типа Sub специального назначения, которая выполняется при возникновении некоего события.
Создание процедур в VBA
Поскольку все VBA процедуры хранятся в модулях то, прежде чем приступать к их написанию, нужно создать новый модуль. Или же выбрать существующий модуль для этой цели.
Текст любой процедуры начинается с операторов, которые определяют её имя и параметры: Sub, Function, Property, или Evet. Окончание процедуры определяется оператором End. Между операторами объявления и окончания процедуры помещается команда, или набор команд программы.
Синтаксис процедуры Sub
Sub Имя [(аргументы)]
(операторы)
End Sub
Здесь,
- Sub – обязательное ключевое слово, которое указывает на начало процедуры.
- Имя – имя процедуры (обязательно должно быть уникальным и составляется согласно правилам языка VBA).
- аргументы – значение, которое передаётся параметру процедуры при её вызове. Это необязательный параметр. Заключается в скобки. Если аргументов несколько, то они разделяются запятыми. Если у процедуры нет аргументов, то после её имени ставят пустую пару скобок.
- End Sub – указывает компилятору VBA об окончании выполнения программного кода текущей процедуры.
Область действия процедур в VBA
Каждая VBA процедура имеет свою область действия, в пределах которой её можно вызвать из других процедур. Эта область действия определяется при объявлении процедуры с помощью ключевых слов Private, или Public.
В зависимости от области действия, выделяют три типа процедур:
- Процедуры доступные для всех процедур в текущем модуле и недоступные для процедур, которые находятся в других модулях. Объявляются такие процедуры с помощью ключевого слова Private.
Private Sub Имя [(аргументы)]
(операторы)
End Sub
- Процедуры доступные для всех модулей во всех проектах. Объявляются они с помощью ключевого слова Public. Поскольку в VBA эта область действия процедур принята по умолчанию, то ключевое слово Public не обязательно указывать при объявлении процедур.
Public Sub Имя [(аргументы)]
(операторы)
End Sub
- Процедуры доступные для всех процедур текущего проекта и недоступные для других проектов. Объявляются с помощью ключевого слова Public и добавлением в модуль оператора Option Private Module.
Если вы создаёте переменную в процедуре, то она доступна только в пределах только этой процедуры. Каждый раз при запуске процедуры она создаётся заново, а при завершении её работы – уничтожается. Такие переменные называют локальными.
Но если вам нужно, чтобы переменная не уничтожалась, а сохраняла своё значение между вызовами процедуры, то при её объявлении используют не Dim, а Static. Такие переменные называют статическими.
Если указать Static при объявлении процедуры, то все переменные в ней будут статическими и их значение будет сохранено даже после завершения выполнения процедуры.
Static Sub Имя [(аргументы)]
(операторы)
End Sub
