Основы офисного программирования и язык 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




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



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