2. Проект VBA и его элементы 2.1 Структура проекта VBA Проект – эта та часть программы, которая видима на экране при ее создании. На рисунке 2.1 приведен пример проекта VBA для приложения Excel.Следующая страничка Вернуться на предыдущую В cодержание темыРис.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. Как определяются процедуры и функции?