Стандартные модули и модули с классом
Большинство создаваемых VBA-модулей - это стандартные модули. В предыдущих версиях VBA и в Visual Basic стандартные модули назывались модулями программного кода.
Такие модули содержат объявления переменных и констант, определения пользовательских типов данных и установки параметров компиляции, а также выполняемые операторы, которые и делают практическую работу. В стандартном модуле можно использовать любой объект, к которому можно получить доступ, но нельзя создать новый тип объекта.
Модули класса, напротив, предназначены для того, чтобы определять в них пользовательские объекты. Создав модуль класса для своего собственного объекта, вы можете затем наполнить его программным кодом, задающим свойства и методы этого объекта. После этого в программном коде из других модулей можно использовать свойства и методы нового объекта точно так же, как это делается со встроенными объектами VBA. Здесь у меня нет возможности углубляться в детали, но хочу заметить, что создание своих собственных объектов служит очень мощным средством программирования.
Создание процедур
Процедуры - это критические функциональные единицы VBA-программы в том смысле, что вы можете выполнить только программный код, содержащийся в какой-либо процедуре.
Основными VBА - процедурам и являются процедуры двух типов- Sub (подпрограммы) и Function (функции). Дополнительная информация о процедурах приводится ниже, во врезке Типы процедур.
Типы процедур
Почти весь создаваемый вами программный код будет содержаться в процедурах всего двух типов - Sub и Function. Процедуры обработки событий, выполняемые в VBA, когда происходит какое-либо событие, например щелчок кнопки мыши, являются специальными процедурами типа Sub. В VBA есть еще один тип процедур-это процедуры типа Property (процедуры свойств). ;
Вот краткое описание особенностей процедур различных типов.
* Процедура типа Sub (подпрограмма) - универсальная процедура для выполнения различных заданий в VBA. Только процедуры типа Sub можно выполнять независимо с помощью приемов, обсуждавшихся в главе 4. Кроме того, одна процедура типа Sub может вызывать (т.е. выполнять) другую.
* Процедура типа Function (функция) тоже может выполнять любой VBA-оператор. Отличие от процедур типа Sub состоит в том, что в данном случае вычисляется некоторое значение, которое возвращается в ту процедуру, откуда процедура типа Function была вызвана.
* Процедура обработки события (event procedure) - это процедура типа Sub специального назначения. Признаю, что об этом я уже говорил. Но зато я не говорил о том, что подробности о процедурах обработки событий вы найдете в главе 14.
* Процедура типа Property (процедура свойства) выясняет или устанавливает значение свойства пользовательского объекта. О процедурах свойств не будет идти речь аж до главы 14, но здесь они упоминаются просто потому, что вы непременно увидите их среди опций диалогового ; окна Add Procedure (Добавление процедуры).
Строго говоря, макрос в VBA- это процедура типа Sub, не имеющая (т.е. не требующая) параметров.
Макросы образуют единственный класс процедур типа Sub, способных выполняться непосредственно путем вызова по имени либо из редактора Visual Basic, либо из VBA-приложения. Чтобы выполнить процедуру типа Sub с параметрами, ее необходимо вызвать из другой процедуры. Работа с аргументами будет обсуждаться в этой же главе в разделе Привлекательные аргументы.
Каркас процедуры
Вот два примера процедур, по одной каждого из типов (Sub и Function):
Public Sub Субмарина()
MsgBox Поднять перископ!
End Sub
Public Function ФункШин(ДатаРождения As Date)
ФункШин = DateDiff (yyyy, ДатаРождения, Date)
End Function
Как видите, каждая из процедур имеет начинающий процедуру оператор ее объявления, как минимум одну строку программного кода и завершающий оператор End. Подробнее эти элементы будут рассмотрены чуть позже в разделах Процедуры типа Sub и Процедуры типа Function.
Прежде чем создавать новую процедуру, нужно открыть окно программного кода для того модуля, в котором вы собираетесь эту процедуру разместить. Создайте новый модуль в соответствии с инструкциями, приведенными выше в разделе Добавление нового модуля в VBA проект, или откройте любой уже существующий модуль, дважды щелкнув на строке с его именем в окне проводника проекта.
После того как окно программного кода модуля будет открыто и станет активным, можно приступить к добавлению новой процедуры. Для начала просто вставьте в модуль оператор объявления процедуры и оператор ее завершения, т.е. оператор End. Это можно сделать двумя способами.
* Выбрать Insert Procedure и заполнить появившееся при этом диалоговое окно.
* Ввести соответствующие операторы вручную.
Печатать или использовать диалоговое окно?
Я рекомендую печатать каркас процедуры вручную просто потому, что использование диалогового окна не дает никакого выигрыша во времени, разве что вы печатаете исключительно медленно. Кроме того, подход сделайте сами позволяет выбрать место размещения процедуры в модуле, которую все равно не удастся заполнить с помощью диалогового окна.
Нужно только щелкнуть в том месте, где должна появиться процедура, напечатать строку с ее объявлением и нажать Enter. Вводить завершающие операторы End Sub и End Function не потребуется - редактор Visual Basic подставит подходящий оператор за вас.
Правда, возможно, что в самом начале освоения VBA вы будете чувствовать себя увереннее с диалоговым окном. Чтобы использовать этот подход, щелкните на кнопке Insert Procedure (Добавить процедуру). (Опять же, наверное, вам придется сначала щелкнуть на этой небольшой полоске со стрелкой рядом с кнопкой Insert и только затем выбрать Procedure из раскрывшегося меню.) Можно также просто выбрать Insert=Procedure из меню.
Появится диалоговое окно Add Procedure (Добавление процедуры). В этом окне нужно напечатать имя процедуры в поле Name (Имя), затем выбрать с помощью переключателей Туре (Тип) и Scope (Область видимости) соответственно тип и область видимости, а также установить, если нужно, флажок All Local variables as Statics (Считать все локальные переменные статическими).