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


Пример 5.11


Option Explicit

'Определение класса КоллекцияЛичностей 'Свойства Private First As ЭлементСпискаЛичностей Private Count As Long 'Обратите внимание: встраиваем коллекцию Private Persons As Collection

'Методы Private Sub Class_Initialize() Set First = Nothing Count = 0 'при создании объекта класса КоллекцияЛичностей создается 'и внутренняя коллекция для хранения его элементов Set Persons = New Collection End Sub

Private Sub AddFirst(F As Личность) Dim Elem As New ЭлементСпискаЛичностей Dim Info As New Личность 'Создаем копию переменной F. В списке будем использовать копию, а не ссылку. Info.CopyPerson F Set Elem.Сам = Info Set Elem.Друг = First Set First = Elem Count = Count + 1 End Sub

Public Sub PrintList() 'Печать текущего состояния списка Dim i As Long For i = 1 To Persons.Count Persons(i).PrintPerson Next i End Sub

Public Sub AddPerson(Item As Личность, Optional key As String = "", _ Optional before As Long = 0, Optional after As Long = 0) Dim P As Личность 'Вначале добавляем элемент в линейный список, 'используя внутренний метод AddFirst AddFirst Item

'Разбор случаев вызова Set P = First.Сам If key <> "" Then Persons.Add P, key ElseIf before <> 0 Then Persons.Add P,, before ElseIf after <> 0 Then Persons.Add P,,, after Else Persons.Add P End If Count = Persons.Count End Sub Public Property Get Количество() As Long Количество = Count End Property

Public Sub Remove(key As Variant) Persons.Remove key Count = Persons.Count End Sub

Public Function Item(key As Variant) As Личность Set Item = Persons.Item(key)

End Function

Public Sub PrintHystory() 'Печать всех элементов в порядке, обратном их добавлению в список. 'Печатаются все элементы, независимо от того, были ли они удалены. Dim P As ЭлементСпискаЛичностей Dim Q As Личность Set P = First While Not (P Is Nothing) Set Q = P.Сам Q.PrintPerson Set P = P.Друг Wend End Sub

Пример 5.11.

Закрыть окно






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



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