2. Проект VBA и его элементы
2.1 Структура проекта VBA
Проект – эта та часть программы, которая видима на экране при ее создании. На рисунке 2.1 приведен пример проекта VBA для приложения Excel.

Рис.2.1. Структура проекта VBA
Как видно из рисунка, проект VBA имеет иерархическую структуру и включает: объекты Excel, формы, стандартне модули и модули классов. Объектами Excel, входящими в проект, являются рабочие книги (WorkBooks), рабочие листы (WorkSheets), диаграммы (Charts). С каждым из этих объектов связан специальный модуль, в который может быть помещен программный код, выполняющий определенные действия.
В модулях класса размещается программный код, описывающий методы класса и его члены – данные для хранения значений свойств.
В модулях могут быть размещены программные коды макросов, отдельно выполняемых процедур и функций.
В модулях форм записываются коды процедур обработки событий формы и элементов управления, размещенных на ней.
В модулях рабочих листов помещаются процедуры обработки событий рабочих листов и элементов управления, размещаемых на рабочих листах.
Таким образом, проект включает две части: интерфейсную, т.е. видимую при выполнении программы, и программную, которая сосредоточена в различных модулях и реализует выполнение заданных действий.
Весь проект представляет собой один файл – рабочую книгу, и сохраняется вместе с ней.
2.2 Структура программы VBA
Программа VBA, представляет собой совокупность процедур и функций размещенных, в зависимости от особенностей решаемой задачи, в одном или нескольких модулях. Каждый модуль имеет две области: общую область и область подпрограмм.
В общей области помещаются операторы описания переменных, которые являются общими для всех процедур и функций этого модуля. 
В области подпрограмм помещается код программы.
В VBA программный код, реализующий какие либо действия, оформляется в виде процедур и функций. Благодаря этому создаваемые программы имеют хорошую структурированность и наглядность. Разработанные отдельные функции или процедуры можно накапливать в библиотеках и в дальнейшем по мере необходимости использовать их. 
2.2.1 Типы процедур и функций и их определение
2.2.1.1. Определение процедур 
Различают следующие типы процедур:
· процедуры обработки событий;
· процедуры макросов
· процедуры пользователя
Процедуры обработки событий связаны с каким-либо объектом и имеют следующий синтаксис:
Private Sub ИмяОбъекта_Событие()
Код обрабатки события 
End Sub
 
где Public - ключевое слово, определяющее область видимости подпрограммы;
Sub - ключевое слово, определяющее тип подпрограммы,
ИмяОбъекта – имя объекта, с которым связывается процедура;
Событие – вид обрабатываемого события.
Например, процедура обработки события Click для объекта Кнопка имеет вид:
Private Sub CommandButton1_Click()
Код обрабатки события
End Sub
Процедуры такого типа вызываются тогда, когда происходит соответствующее событие.
Процедуры обработки макросов создаются при записи макросов. Они имеют синтаксис:
Sub ИмяМакроса()
' Имя Макроса Макрос
' Макрос создан Дата
Программный код макроса
End Sub
Макрос может быть вызван комбинацией клавиш, щелчком на значке, связанным с макросом либо из программы с помощью конструкции вида:
Call ИмяМакроса
Или просто: ИмяМакроса
Процедура пользователя создается им для выполнения каких – либо типовых действий в рамках разрабатываемой программы. Синтаксис процедуры пользователя имеет вид:
[Private | Public] Sub ИмяПроцедуры(СписокПараметров)
Тело подпрограммы (строки кода)
End Sub 
где [Private | Public] - необязательные ключевые слова, определяющие область видимости подпрограммы,
Sub - ключевое слово, определяющее тип подпрограммы,
ИмяПроцедуры- имя подпрограммы,
СписокПараметров- список параметров служит для передачи процедуре исходных данных для вычислений (может отсутствовать). Он состоит из элементов списка разделенных запятыми. End Sub - ключевые слова, указывающие на окончание блока подпрограммы.
Элемент списка параметров имеет синтаксис:
ИмяЭлемента As ТипДанных 
Где ИмяЭлемента – идентификатор;
As – ключевое слово;
ТипДанных – тип данных элемента списка.
Пример простой подпрограммы, вызывающей макрос:
Public Sub AscMe()
Макрос1
[Другие операторы]
End Sub 
Процедура пользователя может быть вызвана из другой подпрограммы так же как и процедура макроса оператором Call или указанием ее имени:
Private Sub Command1_Click()
Call AscMe ‘Вызывается подпрограмма AscMe
[Другие операторы]
End Sub
Private Sub Command1_Click()
AscMe ‘Вызывается подпрограмма AscMe
[Другие операторы]
End Sub
Используя формальные параметры в процедуру пользователя можно передавать значения переменных:
Private Sub Макрос1()
Dim Str As String
Str = " Параметр, передаваемый подпрограмме"
AscMe (Str)
End Sub
Public Sub AscMe(St As String)
MsgBox St
End Sub
Определение функций
Функция - это подпрограмма, которая выполняет действия в пределах своего блока и возвращает единственное значение. 
В VBA различают следующие виды функций:
· функции пользователя
· функции модулей классов
Функция пользователя имеет следующий синтаксис:
[Private | Public] Function ИмяФункции(СписокПараметров)As ТипДанных
‘ Тело функции (строки кода)
ИмяФункции= ВозвращаемоеЗначение
End Function
где [Private | Public] - необязательные ключевые слова, определяющие область видимости функции,
Function - ключевое слово, указывающее на то, что это функция,
ИмяФункции- имя функции,
СписокПараметров- список параметров (может отсутствовать),
As - ключевое слово предваряющее значение типа данных,
ТипДанных - тип данных возвращаемого значения,
ВозвращаемоеЗначение - значение, возвращаемое функцией,
End Function - ключевые слова, указывающие на окончание блока функции.
Обращение к функции может производиться из процедуры, из другой функции. Если в функции предусмотрено рекурсивное обращение, то ее можно вызывать из ее самой. Если функция записана в модуле, то ее можно вызвать из Excel с помощью мастера функций.
При вызове из процедуры или из функции в программном операторе указывается имя функции и передаваемые ей параметры.
Функции модуля классов это специальные функции, предназначенные для установки свойств объектов разработанного пользователем класса, для получения этих свойств и для определения методов класса. Эти функции могут быть помещены только в модуль класса. Синтаксис этих функций и их назначение будут рассмотрены позднее.
Вопросы для самоконтроля
1. Что такое проект и какие элементы он может содержать?
2. Какие типы модулей может включать проект?
3. Какие существуют типы процедур и функций?
4. Как определяются процедуры и функции?

Следующая страничка   Вернуться на предыдущую   В cодержание темы
Hosted by uCoz