Чтение онлайн

на главную

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

dictBigCats.Add "Лев", "Рычащий и лохматый"

dictBigCats.Add "Пантера", "Черная, а не розовая"

Лучше, чем коллекции

Объекты Dictionary в некоторых довольно важных деталях совершеннее подобных им объектов Collection, которые обсуждались в главе 12, по следующим причинам.

* Не требуется знать имена элементов для доступа к ним и к соответствующим им значениям, поскольку возможен доступ ко всем элементам сразу с помощью цикла For Each . . . Next.

Например:

For Each airplane in dictBiplanes

MsgBox dictBiplanes(airplane)

Next

* Можно изменить значение элемента, используя имя элемента, просто присвоив новое значение:

dictVacationDestinations ("Number1") = "Fresno"

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

* Можно удалить все элементы словаря с помощью метода RemoveAll. Для выполнения той же задачи в коллекции приходится использовать цикл For Each . . . Next.

За неимением места здесь не обсуждаются приемы сортировки элементов словарей и выбора подмножеств элементов, удовлетворяющих заданным критериям. Замечу лишь, что такие типичные для баз данных функции реализовать со словарями достаточно просто. Подробные инструкции и примеры программного кода вы найдете в статье Bruce McKinney, Understanding the Dictionary Class, Visual Basic Programmer's Journal, July 1999, (издательство Fawcette Technical Publications), доступной также через Internet по адресу www.vbpj.com.

Пользовательские объекты

Освоив использование встроенных объектов VBA и других объектных библиотек, вы, наверное, захотите создать свои собственные объекты. Хотя можно достичь немалого и с помощью обычных процедур типа Sub и Function, выделение части программного кода в виде объектов обладает реальными преимуществами.

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

* Программа будет легче для чтения и понимания.

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

* Упоминание преимуществ полиморфизма, вероятно, потребует дополнительных разъяснений, но... использование одних и тех же свойств и методов с разными классами объектов все же оказывается удобным. А именно это подразумевает полиморфизм. К сожалению, я не могу тут развивать эту тему, но вы должны знать, что существует такая мощная техника программирования. Подробно полиморфизм обсуждается в книгах, цель которых - более глубокое изучение VBA.

Как вы уже знаете (если прочитали главу 12), объект состоит из данных (свойств объекта) и программного кода, изменяющего эти данные (методов объекта). Поскольку свойства являются просто переменными, а методы - процедурами, создание программного кода, задающего объект, не такая уж сложная задача. Но при этом необходимо следовать определенным правилам, чтобы VBA мог

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

Создание модулей классов

В VBA класс является шаблоном, по которому создаются подобные объекты. Класс определяет, какие свойства, методы и события должен иметь объект и как должен "вести" себя каждый из этих компонентов.

Чтобы создать класс, начните со вставки нового модуля класса в VBA-проект (для чего выберите Insert=Cl ass Module). Окно модуля класса выглядит и работает точно так же, как и обычное окно программного кода. Прежде чем двигаться дальше, задайте имя нового класса в строке (Name) в окне свойств.

Компоненты определения класса

Типичный класс имеет три главных компонента.

* Объявленные локальными переменные, предназначенные для использования внутри объекта.

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

* Открытые процедуры методов, задающие действия, выполняемые методами объекта.

Представленное ниже определение простого класса Thermostat включает все три этих компонента. Сам по себе пример не предназначен для выполнения каких-либо полезных задач, но он работает и есть на Web-странице на случай, если вы захотите его испытать. Если же вы предпочтете набрать программный код самостоятельно, с помощью окна свойств назовите модуль класса Thermostat, а затем введите в окне его программного кода следующее:

Private sngDegrees As Single ' переменная свойства

' Программный код процедуры свойства Let Temperature:

Public Property Let Temperature(ByVal snglnput As _

Single)

sngDegrees = snglnput

End Property

' Программный код процедуры свойства Get Temperature:

Public Property Get Temperature As Single

temperature = sngDegrees

End Property

' Программный код процедуры метода CalculateEnergyUse:

Public Sub CalculateEnergyUse

Const cstConversionFactor =2.45

Dim dblResult

dblResult = sngDegrees * 365 * cstConversionFactor

MsgBox "Годовой расход энергии на поддержание " & _

"установок термостата оценивается в " & _

dblResult & " Ватт."

End Sub

Объявление переменных класса

Для объявления переменных, которые понадобятся в нескольких свойствах или методах, используйте раздел Declarations в самом начале модуля класса. Всегда объявляйте эти переменные как локальные ( Private ), ведь объекты в основном предназначены для того, чтобы запретить программе получить прямой доступ к данным. Переменные, которые будут использоваться только в одном свойстве или методе, должны там и объявляться.

Поделиться:
Популярные книги

Неверный

Тоцка Тала
Любовные романы:
современные любовные романы
5.50
рейтинг книги
Неверный

Релокант. По следам Ушедшего

Ascold Flow
3. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. По следам Ушедшего

Пистоль и шпага

Дроздов Анатолий Федорович
2. Штуцер и тесак
Фантастика:
альтернативная история
8.28
рейтинг книги
Пистоль и шпага

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Все не так, как кажется

Юнина Наталья
Любовные романы:
современные любовные романы
7.70
рейтинг книги
Все не так, как кажется

Безумный Макс. Ротмистр Империи

Ланцов Михаил Алексеевич
2. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
4.67
рейтинг книги
Безумный Макс. Ротмистр Империи

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад

Лапочки-дочки из прошлого. Исцели мое сердце

Лесневская Вероника
2. Суровые отцы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Лапочки-дочки из прошлого. Исцели мое сердце

Сопряжение 9

Астахов Евгений Евгеньевич
9. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
технофэнтези
рпг
5.00
рейтинг книги
Сопряжение 9

Назад в СССР: 1984

Гаусс Максим
1. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Назад в СССР: 1984

Изгой. Пенталогия

Михайлов Дем Алексеевич
Изгой
Фантастика:
фэнтези
9.01
рейтинг книги
Изгой. Пенталогия

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Шипучка для Сухого

Зайцева Мария
Любовные романы:
современные любовные романы
8.29
рейтинг книги
Шипучка для Сухого