Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Коллекция VBA




Объекты, класс которых определен пользователем

При работе с пользовательскими объектами хотя бы часть из них необходимо первоначально создать, и делается это при их объявлении:

{Dim | Private | Public | Static} <имяПеременной> As [New] <имяТипа>

Спецификатор New указывает, что в момент объявления нужно создать новый объект, то есть выделить ему память. В этот же момент ссылка на объект получает конкретное значение. Выделение памяти еще не означает инициализации значений свойств объекта. Инициализацию можно задать при определении события Initialize или в специально построенном методе Init, который следует запускать в начале работы с объектом. Вот пример создания объекта с последующей его инициализацией:

Public Sub CreateMyObject() Dim Nemo As New Личность Nemo.InitPerson FN:="Prince", LN:="Dakar", DB:=#1/23/1838# Nemo.PrintPerson... End Sub

Только метод New позволяет создать новый объект. Но заметьте, спецификатор New не является обязательным, его можно опускать при объявлении таких переменных класса, которые в дальнейшем получат значение, благодаря ссылке на другие, ранее созданные объекты. Задать ссылку на существующий объект нельзя обычным оператором присваивания, для этого в VBA есть специальный оператор Set.

Формат оператора Set:

Set <имяПеременной-объекта> = {<объектное выражение> | Nothing}

Set – специально выделенный, частный случай оператора присваивания. В его левой части стоит имя переменной-объекта, а в правой – некоторое выражение, значение которого – ссылка на объект. В итоге переменная левой части получает значение выражения правой части. Вот строки, которые можно вставить на место многоточия в предыдущей процедуре:

Dim Q As Личность Set Q = Nemo Q.PrintPerson

При использовании ссылок на объекты часто удобно применять оператор With…End With, который имеет следующий формат:

With <объект> <блок операторов>End With

Действие оператора With состоит в том, что он задает <объект>, над которым выполняются все вложенные операторы. При этом не нужно каждый раз повторять ссылку на объект. В результате текст программы становится короче, понятнее и, самое главное, эффективнее. Так, в ранее рассмотренной процедуре CreateMyObject() возможно следующее использование оператора With…End With:

Public Sub CreateMyObject() Dim Nemo As New Личность With Nemo.InitPerson FN:="Prince", LN:="Dakar", DB:=#1/23/1838#.PrintPerson End With...End Sub

3.2.4. Объекты "родного" приложения

Каждый VBA-проект погружен в "родного" приложение Microsoft Office, объекты которого доступны в проекте (такие приложения называют host-приложениями). Для создания таких объектов не используется ни спецификатор New, ни метод CreateObject (будет рассмотрен далее). Новые объекты, если и создаются, то специальными методами своего класса. Например, метод Add позволяет добавлять элементы в коллекции. При работе с объектами этой группы объявляются переменные соответствующего класса, затем они связываются с уже существующими объектами. Связывание выполняет оператор Set. Приведем пример, в котором участвует один из наиболее употребительных классов в приложениях Microsoft Office – Range:

With ActiveDocument Dim myRange As Range Set myRange =.Sections(3). Range. Paragraphs(1).Range.Comments.Add myRange, "Первый параграф носит..." myRange.Move Unit:=wdParagraph, Count:=4 End With

Здесь вначале объявляется объект myRange класса Range, что обеспечивает раннее связывание. Объектное выражение в правой части оператора Set возвращает ссылку на существующий объект (первый параграф третьего раздела активного документа), и эта ссылка становится значением myRange. А затем с этим объектом можно работать, используя свойства и методы соответствующего класса, в данном случае – Range. Его можно использовать, например, в методе Add при работе с коллекцией комментариев или вызвать метод Move для изменения области, отведенной объекту.

Работе с host-приложениями и их объектами будет посвящена Часть V. Объекты Word.

В VBA определено большое количество классов, которые позволяют создавать различные объекты (формы, элементы управления, отчеты и т.д.). Можно создавать и собственные классы.

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

В Microsoft Office существует иерархия объектов приложений. На вершине находится объект Application. Все остальные объекты вложены в него и являются его свойствами. Для ссылки на свойство объекта используется инструкция:

Объект.Свойство

Для ссылки на метод объекта используется инструкция:

Объект.Метод

Например,

AppName=Application.Name

ссылка на свойство Name объекта Application.

Часто существуют несколько экземпляров объектов одного класса. Такие объекты объединяются в коллекции (collection). Коллекцией (семейством) называется упорядоченный набор объектов одного класса. Сама коллекция также является объектом (объект Collection). VBA имеет хорошо продуманный класс Collection, который мог бы послужить основой стандарта на динамический тип данных, включаемый в язык, наряду с такими общепринятыми способами организации данных, как, например, массив.

Коллекция позволяет определять элемент семейства по индексу (по номеру) и по имени. Например,

Worksheets("Лист1").Visible=False ‘скрыть лист MSExcel с именем Лист1

Основные свойства класса Collection:

1. Класс позволяет объединять в коллекцию элементы разных типов, хотя чаще применяются однотипные коллекции.

2. Класс объединяет в себе свойства линейного списка, динамического массива и структуры, называемой словарем или отображением (тар).

3. Это список, поскольку определена операция Add, позволяющая динамически добавлять элементы в конец списка.

4. Это динамический массив, поскольку все элементы индексированы и к ним возможен прямой доступ по индексу. С другой стороны, размер массива не фиксируется и динамически изменяется при добавлении и удалении элементов.

5. Это словарь, поскольку добавляемые элементы могут иметь ключ. Доступ к элементам возможен как по индексу, так и по ключу.

6. В классе определены методы Add, Item, Remove и свойство Count.

При работе с коллекциями часто приходится организовывать цикл по всем элементам коллекции (цикл по совокупности). Ниже показаны обычная организация цикла (For …Next) и цикл по совокупности:

Dim example(10) As Variant For I = 1 To 10 example(I) = 5Next Dim example(10) As Variant For Each I In example example(I) = 5Next

В последнем случае не надо менять код программы при изменении размера массива.




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 1592; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.