Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы.doc
Скачиваний:
26
Добавлен:
21.11.2018
Размер:
16.91 Mб
Скачать

Обзор процедур

До сих пор мы использовали один термин, не объясняя его. Этот термин - процедура. Восполняем этот пробел "расплывчатым" определением: процедура - любая совокупность кода VBA, рассматриваемая как единое целое. Как правило, процедура состоит из операторов, выполняющих какую-либо задачу или вычисляющих значение. Каждая процедура идентифицируется своим уникальным именем.

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

Листинг 4.1. Пример подпрограммы

1: Sub cmdБольшойШрифт_Click ()

2:  With Selection.Font

3:   .Name = "Arial"

4:   .FontStyle = "обычный"

5:   .Size = 16

6:  End With

7: End Sub

Часто выполнение процедуры является реакцией на какое-либо событие (event). В этом случае говорят, что процедура обрабатывает событие. Чтобы узнать, что это за событие, надо посмотреть на имя процедуры. Имя процедуры состоит из названия объекта, cmdБольшойШрифт, и события, Click (щелчок), которое отделяется от названия объекта символом подчеркивания. Для тех, кто еще не догадался, сообщаю, в данном случае процедура выполняется в ответ на щелчок на командной кнопке, которая имеет имя cmdБольшойШрифт.

Процедура-функция (напомню, что мы договорились называть ее просто функцией) в отличие от подпрограммы возвращает какое-либо значение. Это значение часто является результатом вычислений или результатом тестирования чего-либо (в этом случае возвращается логическое значение ИСТИНА или ЛОЖЬ). Как уже упоминалось ранее, вы можете использовать VBA для создания собственных функций. Затем эти функции можно применить при создании формул в ячейках рабочего листа. Листинг 4.2. содержит пример простой функции, вычисляющей торговую наценку в размере 10% от цены.

Листинг 4.2. Пример простой функции

1: Public Function Наценка(Цена)

2:  Наценка = Цена * 0.1

3: End Function

Отметим, что функция использует аргумент Цена, который определяет величину наценки. (Аргументы могут иметь как функции, так и подпрограммы.) Аргумент Цена может быть числом или ссылкой на ячейку рабочего листа. Величина наценки является тем значением, которое возвращает функция. Применение этой функции показано на рис. 4.1.

Рис. 4.1. Использование созданной функции Наценка

Создание процедур

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

  1. Откройте новую рабочую книгу.

  2. Выполните команду Сервис > Макрос > Редактор Visual Basic. Откроется окно редактора Visual Basic.

  3. В левой части окна редактора Visual Basic вы видите окно проектов Project Explorer. Откройте проект VBAProject (Книга1) и щелкните правой кнопкой мыши на элементе ЭтаКнига. В контекстном меню выберите команду Insert > Module (Вставка > Модуль). В ваше приложение будет добавлен модуль (рис. 4.2).

Если вы не видите окно проектов, нажмите комбинацию клавиш <Ctrl+R>.

В верхней части окна кода модуля вы увидите оператор Option Explicit (явное описание опций), который принуждает явно описывать все переменные с помощью операторов Dim, Private, Public, ReDim и Static. Если вы попытаетесь использовать переменную без ее объявления, то при компиляции кода будет выдана ошибка. Этот оператор в новом модуле появляется не всегда, а только тогда, когда в диалоговом окне Options на вкладке Editor установлен флажок опции Require Variable Declaration (Требовать объявления переменных). Диалоговое окно Options открывается командой Tools > Options (Сервис > Параметры).

Рис. 4.2. Окно проектов позволяет следить за компонентами приложений

  1. Выполните команду Insert > Procedure (Вставка > Процедура). Откроется диалоговое окно Add Procedure (Добавить процедуру) (рис. 4.3).

  2. Введите имя процедуры, например ПерваяПроцедура. В секции Туре (Тип) установите переключатель Sub (Подпрограмма). Щелкните на кнопке ОК. Как показано на рис. 4.4, новая процедура будет добавлена в модуль.

  3. В пустой строке находится текстовый курсор, предлагая начать ввод кода процедуры. Нажмите клавишу <Таb> и введите следующий текст:

MsgBox "Это моя 1-я процедура VBA"

После того как вы введете MsgBox и нажмете клавишу пробела, появится окно с информацией о данном операторе.

Делать отступ текста с помощью клавиши <Таb> не обязательно. Отступ делается для более легкого чтения кода.

  1. Нажмите клавишу <Enter>. Завершенная процедура показана на рис. 4.5.

Рис. 4.3. Это диалоговое окно помогает в создании подпрограмм и функций

Рис. 4.4. Новая процедура начинается оператором Public Sub и заканчивается оператором End Sub

Рис. 4.5. Ваша первая процедура имеет всего три строчки кода VBA

VBA требует выполнения определенных правил для имен подпрограмм и функций. Эти правила таковы.

  • Первые три символа имени должны быть буквами.

  • Имя может содержать буквы, цифры и знаки подчеркивания.

  • Имя не может содержать пробелы, точки, запятые, восклицательные знаки (!) и символы @, &, $, #.

  • Имя не должно иметь более 255 символов.