Основы офисного программирования и язык VBA


Обертывание коллекции VBA - часть 3


Благодаря этому встроенному объекту, становятся доступны все свойства и методы стандартного класса Collection.
  • Наиболее интересна реализация метода AddPerson. В этом методе вначале вызывается закрытый метод AddFirst, создающий копию добавляемого элемента и помещающий эту копию в линейный список, представляющий внутреннюю память коллекции. Следующим шагом является вызов метода Add встроенным объектом Persons. Этому предшествует разбор случаев вызова. Дело в том, что метод AddPerson, также как и его прародитель метод Add имеет возможные параметры, которые могут быть заданы или опущены в момент вызова. Так что приходится разбираться, какие из параметров были заданы при вызове.
  • Функция Item и метод Remove достаточно просты в реализации, они вызывают соответствующие методы встроенного объекта.
  • Свойство Count, доступное для чтения, соответствует значению этого свойства внутреннего объекта Persons.
  • В интерфейс класса добавлены два метода печати элементов списка. Один из них распечатывает текущее состояние коллекции, состав элементов которой может динамически изменяться. Другой метод распечатывает историю создания коллекции. Список, представляющий внутреннюю память коллекции, сохраняет эту историю
  • Приведем процедуру для работы с этой коллекцией:

    Пример 5.12.

    (html, txt)

    Вот результаты отладочной печати при работе этой процедуры:

    Адам Первый Человек родился 01.01.100 Ной Праведник родился 01.01.100 Гомер Великий Слепой родился 01.01.100 Вильям Шекспир родился 23.04.1564 Михаил Булгаков родился 23.01.1891 Александр Пушкин родился 06.06.1799 6 Ной Праведник родился 01.01.100 Вильям Шекспир родился 23.04.1564 Михаил Булгаков родился 23.01.1891 Александр Пушкин родился 06.06.1799 4 Александр Пушкин родился 06.06.1799 Вильям Шекспир родился 23.04.1564

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

    Public Sub ВводКоллекции() 'Создание коллекции в диалоге с пользователем Dim Личности As New КоллекцияЛичностей Dim ЭтоЛичность As New Личность Dim Имя As String, Фамилия As String, Дата As Date If MsgBox("Начнем создавать список личностей?", vbYesNo) = vbYes Then Do ЭтоЛичность.ВашеИмя = InputBox("Введите имя личности") ЭтоЛичность.ВашаФамилия = InputBox("Введите Фамилию") ЭтоЛичность.ВашаДатаРождения = InputBox("Введите дату рождения ") Личности.AddPerson ЭтоЛичность Loop Until MsgBox("Продолжим создавать список личностей?", vbYesNo) = vbNo Личности.PrintList End If End Sub

    На этом мы и поставим точку в этой лекции.




    Начало  Назад  Вперед



    Книжный магазин