Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5401.pdf
Скачиваний:
5
Добавлен:
13.11.2022
Размер:
1.36 Mб
Скачать

10

Объектная модель пакета Office

Приложения пакета Office представляют собой огромный набор – несколько сотен унифицированных объектов. Именно наличие такой коллекции программных объектов позволяет говорить о MS Office не просто как о наборе приложений, а как о платформе более высокого уровня по сравнению с традиционной операционной системой. С точки зрения разработчика, говоря о платформе Windows, в первую очередь подразумеваются средства программирования приложения Win API. Соответственно платформа MS Office представлена в виде объектной модели пакета.

Мощь системы программирования зависит от наполнения стандартных библиотек. Например, в С++ это библиотеки MFC, Microsoft Foundation Classes. В VBA это классы объектов Office и его основных приложений

Word, Excel, PowerPoint, OutLook и Access. Иерархия взаимосвязанных объектов, которые описывают и реализуют функциональность некоторой области применения, составляет объектную модель приложения этой области (см. рис. 1).

Каждое офисное приложение имеет свой набор объектов. Основные приложения MS Office имеют порядка нескольких сот объектов каждое. Структура объектов отражает функционал и интерфейс приложения. Таким образом, общее количество свойств и методов в Office достигает нескольких тысяч.

Более половины объектов Office являются общими для всех приложений пакета (см. 1-4. рис. 1).

1.рис 1. Глобальные объекты VBA содержатся в стандартной библиотеке VBA. Эти объекты используют все приложения семейства MS Office, непосредственно напрямую обращаясь к их свойствам и методам либо косвенно используя их для построения своих объектов наследников. Сюда входят объекты Drive, File, Folder, предоставляющие доступ к файловым системам локальных и сетевых дисков; Collection, Dictionary, TextStream

для построения конкретных объектов приложений. Debug и Err для отладки модулей VBA и обработки ошибок времени выполнения; абстрактный объект VBA UserForm представляет форму для наполнения конкретным содержанием при разработке пользовательского интерфейса.

2.рис. 1. Библиотека объектов Microsoft Forms. Сюда входят объекты единообразного интерфейса: меню, панели инструментов, окна, кнопки, раскрывающиеся списки и так далее.

11

4

11

12

 

 

3

 

7

 

 

9

6

2

1

8

 

 

5

 

10

 

 

 

Рис. 1. Объектная модель Office

3.рис. 1. Стандартная библиотека Office, реализующая объектную модель MS Office как интегрированного пакета приложений. Сюда входят объекты для работы с Web, общие для всех приложений Office, библиотека OLE Automation для совместной работы приложений семейства Office.

4.рис. 1. Общими являются библиотеки, предоставляющие определенные функциональные возможности. Это объект Office Assistant – хорошо всем известный персонифицированный Помощник, мастер ответов AnswerWizard, цифровая подпись SignatureSet, Scripts – сценарии, языковые настройки LanguageSettings.

5–9. рис. 1. Каждое приложение имеет набор присущих только ему объектов. Страница, оглавление, абзац в Word; листы, диапазоны ячеек в Excel; слайды, эффекты презентации в PowerPoint. Компоненты объектной модели каждого приложения размещаются в одноименных библиотеках объектов, это файлы с расширением .olb.

12

Корневым объектом в объектных моделях каждого офисного приложения является объект Application, в него вложены все остальные объекты приложения. Каждый объект представляет собой отдельный объект или семейство объектов. Механизм встраивания объектов определяет ссылку на конкретный объект иерархии в виде последовательности имен через точку, начиная с объекта Application. Конкретный элемент в семействе указывается при помощи индекса или по имени. Например, ссылка для объекта на пятой ступени иерархии будет выглядеть так:

Application.ActiveDocument.Paragraphs(2).Range.Text

Здесь записано обращение к свойству Text объекта Range, который является свойством объекта абзац, второго в коллекции Paragraphs. Коллекция абзацев является, в свою очередь, свойством объекта активный документ объекта Application, корневого объекта приложения Word. ActiveDocument – это специальная переменная, которую поддерживает Word для ссылки на активный документ как элемент коллекции открытых документов Application.Documents. Еще более короткая ссылка на активный документ ThisDocument позволяет не указывать явно объект Application при работе в родном приложении. При помощи этой переменной наша ссылка будет выглядеть как

ThisDocument.Paragraphs(2).Range.Text

10.рис. 1. Семейство ComAddIn-объектов, соответствующих надстройкам COM, зарегистрированных в реестре Windows, то есть установленных на компьютере.

11.рис. 1. К другим программам, поддерживающим технологию VBA, относится продукция фирмы Microsoft, например, Project, CorelDraw и широкий ряд продуктов, не Microsoft, в основе которых лежит язык программирования VBA. Например, приложение для работы с векторной графикой Visio. Объектные модели таких приложений органично стыкуются с общими объектами VBA и Office.

12.рис. 1. Здесь находится место объектов разработанных пользователем классов в его VBA-программах.

Общие сведения о языке VBA

Для манипулирования объектами офисных приложений используется язык VBA. Ядро языка VBA – это язык Visual Basic: синтаксис, типы данных, объявление и использование переменных, операторы. Эти конструкции языка не зависят от среды использования.

13

Программный код языка VBA представляет собой последовательность операторов, организованных в модули. Перечень операторов VBA весьма обширен. Рассмотрим необходимый нам минимум операторов из групп операторов описания объектов, операторов присваивания, управляющих операторов и операторов для работы с файлами. В бейсике намного больше операторов, чем рассматривается в данном пособии. Это рудиментарные операторы для поддержки программ старых версий языка и операторы профессионального программирования.

В VBA используется свободный формат текста программы. То есть текст программы представляет из себя непрерывный текст, в котором пробелы и переходы на новую строку не влияют на смысл программы. Существует возможность размещения нескольких коротких операторов на одной строке через двоеточие, но некоторые операторы (If ….Then ….Else и некоторые другие) могут начинаться только с новой строки. Для продолжения длинного оператора на следующую строку используется пара символов пробел-подчерк « _». Для облегчения чтения кода и отладки рекомендуется писать операторы каждый с новой строки, не экономя места.

Тексты программ сопровождаются комментариями. Комментарии размещаются в продолжении строки или на отдельной строке после символа одинарная кавычка «’». Комментарии не влияют на исполнение программы. Пример комментариев:

’Лабораторная работа №1 s = pi*r^2 ’площадь круга

VBA как язык (как любой язык, естественный, математический, язык жестов или язык программирования) имеет системную организацию, построенную на следующих понятиях:

алфавит – допустимые символы языка;

слово (лексема) – последовательность символов, воспринимаемая языком как единое целое и имеющая определенный смысл;

лексика – словарь языка и правила образования слов из символов;

синтаксис – правила построения из слов выражений и законченных конструкций (предложений);

семантика – значение и логический смысл синтаксических конструкций;

прагматика – назначение, область применения.

Алфавит VBA составляют все символы, которые можно ввести с клавиатуры. Например, буква А или а, цифра 7, знак © (знак авторского права, набирается с клавиатуры как Alt+0169).

14

Лексику языка VBA составляют

числа,

идентификаторы (имена),

строки,

разделители.

Запись числа составляется из цифр от 0 до 9, символа точки, +, -, букв Е или е. Точка в записи числа используется как разделитель целой и дробной части.

Строка составляется из любых символов алфавита и заключается в двойные кавычки.

Имя составляется из английских, русских строчных или прописных букв, цифр и символа подчеркивания «_» согласно правилам именования.

Вкачестве разделителей между лексемами используются символ пробела, символ продолжения строки «_», символ табуляции и символ перевода строки.

Ключевые слова – это зарезервированные транслятором имена для своих языковых конструкций. Например, Integer, Double, String, True, False, Do, Loop,.. Всего несколько десятков слов. Это иероглифы языка, не связанные с значениями этих слов в естественных языках.

Вязыке программирования информацию понимают довольно узко, как данные и методы их обработки. Данные характеризуются своими типами, которые определяют

формат представления данных в памяти машины,

область возможных значений,

множество допустимых операций над данными.

В VBA встроены простые типы данных: логические, арифметические и строковые (см. табл. 1).

Для хранения данных, изменяющихся в процессе выполнения программы, используются переменные. Доступ к такой области памяти осуществляется по имени переменной. Имя переменной, в профессиональной терминологии идентификатор, – это строка из символов букв, цифр и подчерка «_», удовлетворяющая следующим правилам.

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

Прописные и строчные буквы в имени не различаются.

Длина имени не должна превышать 255 символов.

Имя переменной не должно совпадать с ключевыми словами языка.

15

 

 

Таблица 1

 

Встроенные типы данных VBA

 

 

 

Тип

Возможные значения

Выделяемая память

 

 

 

Boolean

True, False

2 b

Byte

0 … 255

1 b

Integer

-32768 … +32767

2 b

Long

~-2000000000 … +2000000000

4 b

Decimal

~30 десятичных цифр

12 b

Single

-3,4e38 … +3,4e38

4 b

Double

-1,7e308 … 1,7e308

8 b

Currency

до 15 цифр до запятой и 4 после

8 b

String

до 216 символов

10 b + 1 b на символ

Date

1 января 100 г. … 31 декабря 9999 г

8 b

Object

ссылка (указатель) на объект

4 b

Variant

универсальный тип

≥ 16 b по контексту

Примечание к таблице. Кроме перечисленных выше, VBA позволяет создавать пользовательские структурированные типы данных: записи и классы, которые в данном пособии не рассматриваются.

Например, имена myName, MyName и myname не различаются, My.name – недопустимое имя.

Пояснения к правилу именования переменных.

Нечувствительность VBA к регистру, указанная во втором правиле именования, используется встроенным в IDE редактором, в котором пишется текст программы. Редактор отслеживает, все имена и при повторном вводе идентификатора восстанавливает регистр букв, который использовался при первом написании. В примере выше MyName и myname редактор автоматически приведет к myName.

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

Во-первых, имена должны быть не слишком длинными, но отражать смысл переменной. Например, переменную, предназначенную для хранения количества страниц в книге, можно поименовать как cntPage (от count of book pages).

Во-вторых, за пределами правил хорошего тона использование транслита, то есть запись русских слов английскими буквами, по написанию совпадающими с русскими, или запись латинскими буквами произношения русских слов, что выглядит ужасно. В VBA можно имена составлять по-

16

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

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

И наконец, при начальном определении имени следует использовать комментарии о смысле переменной.

За долгую историю развития языка Visual Basic от бестипового к структурированному языку с хорошо определенными типами данных сформировалось несколько способов объявления переменных. Переменную в VBA можно объявлять или не объявлять, и тогда тип ей будет присвоен по умолчанию, или по первой букве имени, или по специальному символу объявления типа, которым может заканчиваться имя. Явно объявить переменную можно как в начале блока, так и в том произвольном месте, где возникла необходимость использовать новую переменную. Для повышения надежности программ рекомендуется все переменные объявлять явно и в начале блока. Включение в начало модуля оператора Option Explicit (опция Явно) автоматически проверяет предварительное объявление переменных.

VBA имеет следующие возможности объявления типа переменной. Первый способ объявления переменной. Переменная может не объяв-

ляться, тогда по умолчанию ей присваивается при первом использовании тип Variant. Переменные типа Variant могут получать значения любого типа в зависимости от контекста. Это удобно, но чрезмерное использование этого типа, особенно для массивов, приводит к неэффективному использованию памяти. К тому же при непродуманной типизации переменных трудно обнаруживаются ошибки, поэтому рекомендуется всегда объявлять тип переменных.

Второй способ объявления переменной. Явное определение переменной оператором Dim.

Синтаксис оператора:

Dim имяПеременной [As тип]

Если конструкция As опущена, переменная получает тип Variant. Одним оператором Dim можно объявить несколько переменных через запятую, но конструкция As должна быть указана для каждой переменной, иначе переменным без As будет присвоен тип Variant.

17

’пример объявления переменных

Dim myName As String, числоВорон As Integer, _ pi As Double, дваПи As Double

Третий способ объявления переменной. Объявление типа переменной с помощью суффикса при первом использовании переменной. Суффиксы имеют шесть простых встроенных типов:

% – Integer, например, числоВорон%

& – Long, например, секунд_в_сутках&

! – Single, например, мойРост!

# – Double, например, пи#

$ – String, например, myName$

@ – Currency, например, суммаВыплат@

Четвертый способ объявления переменной. Объявление типа по первой букве оператором DefТип.

Синтаксис оператора DefТип:

DefТип начальнаяБуква[-конечнаяБуква]

где DefТип – одно из следующих ключевых слов DefInt, DefLng,

DefSng, DefStr.

’пример объявления типа переменных по первой букве DefInt i-n ’начинающиеся на i,j,k,l,m,n – целого типа

По умолчанию в момент объявления переменных VBA инициализирует их следующими значениями:

0 – для числовых значений; пустая строка (””) – для строк переменной длины;

строка, содержащая нули, – для строк фиксированной длины;

Empty (значение, указывающее на отсутствие инициализации) – для статических переменных типа Variant.

При написании программ для постоянных значений используются именованные константы. Они объявляются оператором Const. В момент объявления задается значение константы, которое далее нельзя изменить.

Синтаксис оператора Const:

Const имяКонстанты [As тип] = константноеВыражение

В константном выражении можно использовать арифметические и логические операции, но операндами могут быть только константы. Если не определить тип константы, он будет восстановлен по значению константного выражения.

18

’пример определения классической константы

Const pi As Double = 3.1415926535

’константа дваПи будет типа Double Const дваПи = 2*pi

’пример строковой константы

Const myName As String =”Маша”

Важной категорией констант являются встроенные константы. В VBA

иприложениях MS Office определено огромное количество таких констант. Обычно они имеют соответствующий префикс: wd, xl и т.д. Имеются встроенные константы самого VBA с префиксом vb, например, vbWhite, vbSunday, vbKeyEscape, vbOkOnly. Они позволяют указы-

вать тип календаря, дни недели, цвет, клавиши и применяются в различных ситуациях, например при работе с окном сообщений.

Массив – простейший и самый распространенный структурный тип. Массив – это упорядоченный набор элементов одного типа. Массивы могут быть одномерными и многомерными. Возможное число измерений массива – 60. Обычно используются одномерные, двумерные, реже трехмерные массивы. Доступ к элементу массива осуществляется по его порядковому номеру, называемому индексом. Определяется массив оператором Dim.

Синтаксис оператора Dim (для случая одномерного массива):

Dim имяПеременной ([нижнийПередел То] верхнийПредел) _

[As тип]

Традиционно в языке Basic нижняя граница была фиксирована и равна 0. То есть при задании только верхней границы в объявлении массива индексация начинается с нуля, первый элемент имеет индекс 0, второй – 1

ит.д. Затем была определена специальная опция Option Base, позволяющая устанавливать нижнюю границу равной 1 или 0. С определением границ размерностей массива связан еще ряд тонкостей, которые необходимо выверять дополнительно при применении массивов в VBA различных офисных приложений. Например, нумерация элементов в семействах

Word и Excel начинается с 1, а в Access c 0.

’пример объявления одномерных массивов

Dim a(14) As Integer ’массив a из 15 элементов

Dim b(1 To 15) As Integer ’массив b из 15 элементов

ВVBA весь программный код находится внутри подпрограмм: процедур и функций. Согласно принципу структурного программирования, а

19

именно принципу функциональной декомпозиции каждый программный модуль разбивается на отдельные подпрограммы. Подпрограмма скрывает выполняемую последовательность действий и действует как единая абстрактная операция. На рисунке ниже (см. рис. 2) приведена классификация подпрограмм VBA.

Подпрограммы

 

Процедуры

 

Функции

 

(Sub)

 

(Function)

 

 

 

 

 

 

 

 

 

 

 

 

Процедуры

 

 

 

 

 

 

 

Общие

 

обработки событий

 

 

 

 

 

процедуры

 

(Event)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 2. Классификация подпрограмм VBA

Общие процедуры начинают работать после их явного вызова из како- го-нибудь места программы. После выполнения происходит автоматический возврат в то место программы, откуда процедура была вызвана. Процедуры обработки событий начинают работать в ответ на какое-нибудь событие.

Общая структура описания процедуры:

Sub имяПроцедуры[(параметры)] операторы

End Sub

Процедуры вызываются процедурами обработки событий или подпрограммами пользователя оператором Call.

Синтаксис оператора: Call:

Call имяПроцедуры[(параметры)]

Вызов процедуры по имени:

имяПроцедуры[(параметры)]

Функция отличается от процедуры тем, что возвращает значение на свое имя.

Структура описания функции:

Function имяФункции[(параметры)] As[тип]

20

операторы имяФункции = выражение

End Function

Вызов функции:

Переменная = имяФункции[(параметры)]

В процедурах событий набор параметров зависит от события и не может быть изменен разработчиком. В общих процедурах количество и порядок используемых параметров определяется разработчиком. Параметры можно передавать как ссылки (ByRef) или как значения (ByVal). В VBA по умолчанию параметры передаются как ссылки. При вызовах подпрограмм параметры можно задавать по именам. Обращение к подпрограммам с именованными параметрами позволяет передавать часть, а не все параметры и в любом порядке.

Синтаксис обращения к процедуре с именованными параметрами:

имяПроцедуры имяПараметра:=значение _ [, имяПараметра:=значение]

Пример обращения к процедуре с именованными параметрами:

Sub Summa(a,b,c) c=a+b

End Sub Sub MySub()

Summa c:=s,a:=val(Text1.Text),b:=val(Text2.Text) Text3.Text=Str(s)

End Sub

При объявлении переменной определяется ее тип и область видимости. Переменные можно объявлять на двух уровнях – уровне процедуры и уровне модуля. Для объявления переменных используются операторы Dim, Public, Private и Static. Первый можно использовать на обоих уровнях, Public и Private – на уровне модуля, Static – только на уровне процедуры.

Переменные, объявленные на уровне процедуры, называются локальными. Их областью видимости является только та процедура, в которой они объявлены. Локальные переменные можно объявлять в любом месте процедуры, но до выполняемых операторов, использующих эти переменные.

Переменные уровня модуля являются глобальными. Они объявляются в разделе Declarations, который есть у каждого модуля. Область видимости глобальных переменных может распространяться:

на все процедуры одного модуля, в котором они объявлены; такие глобальные переменные, называемые закрытыми (Private), должны

21

быть объявлены на уровне модуля оператором Private или операто-

ром Dim;

на все приложение – все процедуры всех модулей данного приложения, такие глобальные переменные, называемые открытыми, должны быть объявлены оператором Public.

Локальные переменные уровня процедуры могут быть объявлены оператором Static, что делает их статическими. Для локальных переменных, объявленных таким образом, изменяется механизм хранения их в оперативной памяти, и время существования соответствует времени с момента первого запуска процедуры/функции, в которой определена статическая переменная, до окончания работы программы. Обычные локальные переменные создаются и инициализируются (им присваивается значение) в своей процедуре/функции, видимы только в ней и удаляются при завершении этой процедуры/функции (память под переменные отводится при входе в процедуру/функцию, а при выходе она освобождается). Область видимости статической переменной такая же: процедура/функция, в которой эта переменная объявлена, но время существования иное, так как статическая переменная не удаляется из памяти при завершении процедуры/функции, просто переменная становится временно недоступной. Поэтому при повторном вызове процедуры/функции статические переменные восстанавливают те значения, которые они имели при завершении работы процедуры/функции при предыдущем вызове. Статические переменные – это хранители информации между многократными вызовами одной и той же процедуры/функции. Чтобы статические переменные имели смысл, необходима первоначальная инициализация переменных – они должны иметь какие-то значения уже при первом вхождении в процедуру/функцию.

Перед оператором в строке может быть указана метка: последовательность символов, начинающаяся с буквы и кончающаяся двоеточием «:». Метки можно размещать и в отдельных строках перед теми операторами, которые они должны идентифицировать. Они нужны для операторов перехода GoTo, использование которых считается несоответствующим требованиям структурного программирования.

Все операторы языка условно делятся на исполняемые и неисполняемые. Термин неисполняемые операторы используется для противопоставления исполняемым операторам. К неисполняемым операторам относятся приведенные выше операторы объявления переменных, констант, процедур, функций и массивов. На самом деле неисполняемые операторы тоже исполняются. Исполняемые операторы выполняются в общем случае в том

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]