Еще одним подтверждением пользы оформления блоков программного кода в виде процедур служит возможность при этом устранить повторный ввод одних и тех же блоков. Например, если в разных местах программы используется одна и та же последовательность операторов, то можно упростить программу и уменьшить ее размеры, поместив повторно используемые операторы в процедуру. Такую процедуру можно будет вызывать по имени из любой части программы.
Кроме того, создание процедуры для повторно используемой последовательности операторов сокращает объем довольно нудной работы по печатанию программного кода, а также позволяет избежать опечаток, которые вы можете допустить при вводе (точнее, обязательно допустите, если будете печатать фрагменты одинакового программного кода повторно). Если повторяющиеся операторы представить в виде процедуры, то и корректировать придется только одну эту процедуру.
Обзор области видимости
Каждая VBA-процедура имеет свою вполне определенную область видимости. Область видимости определяет, из какой части программы вы можете вызвать эту процедуру, а из какой - нет. Можно сказать, что область видимости отвечает за то, какая часть программы сможет увидеть данную процедуру.
Область видимости процедуры может быть одной из следующих трех типов.
* По умолчанию процедуры VBA (за исключением процедур обработки событий) рассматриваются как открытые (public). Это значит, что вы можете вызывать их из любой части программы - из того же модуля, из другого модуля и даже из другого проекта (конечно, если программа использует несколько проектов, что обсуждается в главе 14).
* Если нужно, можно объявить процедуру локальном (private). Локальная процедура будет видима (если вы пожелаете) только внутри содержащего ее модуля. Другими словами, вы сможете вызвать локальную процедуру из других процедур того же модуля, но не из процедур, размещенных в других модулях.
* В VBA-программах, использующих несколько проектов, можно создавать процедуры, доступные изо всех модулей в рамках данного проекта, но не из других проектов.
Точно такие же области видимости задаются и переменным (подробно об этом - в разделе Задание области видимости переменной главы 7).
Задание области видимости процедуры
Чтобы задать область видимости процедуры, нужно в начале объявления процедуры просто напечатать ключевое слово Public или Private. Взгляните на следующие примеры:
Public Sub IKr.eadYouO
...( операторы процедуры)
End Sub
Private Function IKneedYou()
.. . (операторы процедуры)
End Function
Поскольку по умолчанию процедуры предполагаются открытыми, ключевое слово Public указывать для этого не обязательно. Однако, если в программе есть хотя бы одна локальная процедура, я рекомендовал бы явно определять и открытые процедуры, чтобы с первого взгляда определить область видимости любой из процедур.
Чтобы ограничить область видимости открытой процедуры рамками одного проекта и сделать ее недоступной для других проектов, поместите в раздел объявлений соответствующего модуля оператор Option Private Module. Подробности об использовании таких операторов вы найдете ниже, в разделах Объявления и Параметры компилятора.
Использование локальных процедур
Объявление процедуры локальной помогает избежать многих ошибок. Поскольку в таком случае можно вызывать процедуру только в рамках содержащего ее модуля, легче контролировать условия, которые складываются во время вызова (эти условия включают значения переменных, используемых этой процедурой).
Объявить процедуру локальной несложно, но зачем беспокоиться? В конце концов, VBA же не требует вызывать процедуру только потому, что она открыта!
Главной причиной является повышение надежности. Вы можете забыть, что данная процедура предназначена для использования только внутри модуля. Если процедура локальна.
VBA не позволит вам вызвать ее из другого модуля, когда вы попытаетесь это сделать.
А в программах значительных объемов и сложности уменьшение области доступа к процедуре еще и помогает контролировать организацию программы.
Использование операторов
Процедуры состоят из операторов - наименьших жизнеспособных единиц программного кода. Как правило, операторы занимают по одной строке программного кода, и в каждой строке обычно содержится только один оператор, но, как будет показано немного позже, это не обязательно. В VBA четыре типа операторов: объявления
Объявления
Объявление - это оператор, сообщающий компилятору VBA о ваших намерениях по поводу использования в программе именованного объекта (переменной, константы, пользовательского типа данных или процедуры). Кроме того, объявление задает тип объекта и обеспечивает компилятору дополнительную информацию о том, как использовать данный объект.
Объявив объект, вы можете использовать его в любом месте программы.
Рассмотрим пример объявления переменной. Переменные - это именованные значения, которые могут изменяться во время выполнения программы (подробно об этом - в главе 7).
В следующем операторе объявляется переменная с именем МоеЛюбимоеЧисло и заявляется о том, что значение, которое она будет содержать, должно быть целым:
Dim МоеЛюбимоеЧисло As Integer
В главе 7 обсуждаются также константы, представляющие собой именованные значения, которые не меняются. Следующий оператор создает строковую константу (текст) с именем НеизменныйТекст, представляющую собой набор символов Вечность:
Constant НеизменныйТекст = Вечность
Объявление переменной или константы можно поместить либо в разделе объявлений модуля, либо внутри конкретной процедуры. Выбор места зависит от того, какой должна быть область видимости. Здесь же вы найдете несколько примеров объявления переменных.