Классы и объекты
Давайте рассмотрим следующую задачу: допустим, мы полностью определили класс Book (в качестве домашнего задания исправьте это "допустим" на "с легкостью") и перед нами стоит проблема упорядочения все нарастающих сведений о книгах, да так, чтобы в этой системе можно было легко выполнить поиск, чтение и запись. Конечно, располагая имеющимися на данный момент обучения средствами, мы могли бы создать массив объектов класса Book. Но подобная конструкция не отвечает нашим возросшим требованиям, например добавление и удаление книг, их поиск потребуют специальных средств (создание специальных функций, проверка и т. д.).
Для решения подобной проблемы в VBA присутствует особый класс collection, который позволяет очень быстро и удобно решить проблему построения динамических структур данных.
Семейством (Collection) называется упорядоченный набор объектов. В принципе объекты могут быть разных классов, но, как правило, встречаются семейства однородных объектов. Грубо говоря, семейство представляет собой сплав динамического массива и записи, что позволяет, с одной стороны, перенумеровать все элементы семейства, а с другой, иметь прямой доступ к объектам – элементам семейства – по значению определенного поля, называемого ключом. Ключ – это строковое выражение, которое может быть использовано вместо индекса для доступа к элементу семейства.
Как же устроен этот чудо-класс? Класс collection имеет одно свойство Count и три метода – Add, Item и Remove.
Свойство count очень простое, оно возвращает количество элементов семейства (то есть количество объектов, включенных в семейство в данный момент).
Метод Add (элемент (,ключ] [, до] [, после}) добавляет объект в семей-ство. Его обязательным аргументом является элемент. Он, как вы можете догадаться, добавляет в семейство элемент. Параметр ключ задает ключ, по которому можно будет произвести поиск этого элемента. Параметры до и после указывают на то, перед каким или после какого элемента добавляется новый. По умолчанию элемент добавляется в конец семейства.
Метод Remove (ключ) удаляет элемент из семейства. Параметр ключ – это ключ или индекс, указывающий на удаляемый элемент. Заметьте, что при удалении элемента из семейства не остается дыр: индексы перенумеровываются, значение свойства count уменьшается на единицу.
Метод item (ключ) возвращает значение элемента семейства с ключом ключ. Как в случае с методом Remove, параметр ключ может быть как ключом, так и индексом.
Давайте запрограммируем решение вышерассмотренной задачи, используя знания о семействе. В этом примере мы объявляем семейство Books и инициализируем его, добавляя три объекта. После того как семейство инициализировано, мы удаляем один элемент и выводим оставшиеся элементы.
Программа 20.29. Объявление семейства.
Sub
BooksCollection()
Dim
Books
As
New
Collection
Dim
Novikov
As
New
Person
Dim
Vba
As
New
Book
Novikov.perslnit
"Novikov"
, #10/10/1951#,
True
Vba.booklnit
"VBA и разработка приложений в Office 2000"
, Novikov
Books.Add Vba,
"VBprog"
Dim
Office
As
New
Book
Office.booklnit
"Microsoft Office 2001 в целом"
, Novikov
Books.Add Office,
"off"
Dim
Stroustrup
As
New
Person
Dim
С
As
New
Book
Stroustrup.perslnit
"Stroustrup"
, #11/25/1947#
C.booklnit
"C++ Programming"
, Stroustrup
Books.Add C,
"Cprog"
, 2
Books.Remove
"Cprog"
For
i = 1
To
Books.Count
Books.Item(i).bookPrint
Next
i
End
Sub
На этом мы заканчиваем описание языка VBA, считая, что вы готовы к его полноценному использованию, и переходим к описанию редактора Visual Basic Editor.