Виды процедур

Понятие процедур и функций. Создание собственных макросов

Константы

Константы — еще один контейнер для хранения данных, но, в отличие от переменных, они не изменяются в ходе выполнения VBA-программы. Константы используют в следующих случаях:

q код становится более читаемым, убираются потенциальные ошибки;

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

В VBA константы определяются при помощи ключевого слова Const:

Const COMP_NAME As String = "Microsoft"

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

Константы очень удобны при работе с группами именованных элементов (дни недели, месяцы, цвета, клавиши, типы окон и т. п.). Они позволяют использовать в коде программы легко читаемые обозначения вместо труднозапоминаемых числовых кодов. Например, строки:

UserForm1.BackColor = vbGreen

и

UserForm1.BackColor = 65280

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

В VBA встроено множество служебных констант: календарных, для работы с файлами, цветами, формами, типами дисков и т. п. Просмотреть их можно через справочную систему VBA: Microsoft Visual Basic Documentation | Visual Basic Language Reference | Constants. Про одну из констант (она находится в разделе Miscellaneous Constants) следует сказать особо: константа vbCrLf позволяет произвести переход на новую строку, например:

MsgBox "Первая строка" + vbCrLf + "Вторая строка"

Множество наборов констант встроено в объектные модели приложений Office.

Процедуры — это самые важные функциональные блоки языка VBA. В VBA вы можете выполнить только тот программный код, который содержится в какой-либо процедуре (обычной в стандартном модуле, событийной для элемента управления на форме и т. п.). Иногда начинающие пользователи пытаются записать команды прямо в область объявлений стандартного модуля и не могут понять, почему они не выполняются (сообщения об ошибке при этом не выдается — просто этот код становится "невидим" для компилятора). Причина проста: в разделе объявлений модуля (когда в верхних списках редактора кода показываются значения (General) и (Declarations)) могут быть только объявления переменных уровня модуля и некоторые специальные инструкции для компилятора. Весь остальной программный код должен находится внутри процедур.

В VBA предусмотрены следующие типы процедур:

q процедура типа Sub (подпрограмма) — универсальная процедура для выполнения каких-либо действий:

Sub Farewell()

MsgBox "Goodbye"

End Sub

Макрос в VBA — это процедура типа Sub, не имеющая параметров. Только макросы можно вызывать по имени из редактора VBA или из приложения Office. Все другие процедуры нужно вызывать либо из других процедур, либо специальными способами, о которых будет рассказано далее;

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

Function Tomorrow()

Tomorrow = DateAdd("d", 1, Date())

End Function

и пример ее вызова:

Private Sub Test1()

Dim dDate

dDate = Tomorrow()

MsgBox dDate

End Sub

В тексте функции необходимо предусмотреть оператор, который присваивает ей какое-либо значение. В нашем случае это строка:

Tomorrow = DateAdd("d", 1, Date())

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

Private Sub Test1()

MsgBox Tomorrow()

End Sub

В VBA предусмотрены сотни встроенных функций (и гораздо большее количество функций предусмотрено в объектных моделях приложений Office). Даже в нашем примере используются две встроенные функции: Date(), которая возвращает текущую дату по часам компьютера, и DateAdd(), которая умеет прибавлять к текущей дате определенное количество дней, недель, месяцев, лет и т. п.

В VBA имеются также процедуры обработки событий (event procedure) — процедуры типа Sub специального назначения, которые выполняется в случае возникновении определенного события, например, при открытии формы или нажатии на ней кнопки.

Есть еще процедуры типа Property (процедуры свойства). Они нужны для определения свойств создаваемого вами класса, а поскольку создание своих классов мы заниматься не будем, то их можно не рассматривать.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: