Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA For Excel Часть 02.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.08 Mб
Скачать

Создание свойств и методов пользовательского класса

В примере ниже нами приведен текст модуля класса, который имеет только одно свойство, и, пример использования экземпляра данного класса в другом модуле проекта.

Текст модуля класса с именем Класс1

Локальное поле модуля класса для сохранения значения свойства Text

Private Txt As Variant

Получение значения свойства Text

Public Property Get Text() As Variant

Text = Txt

End Property

Изменение значения свойства Text

Public Property Let Text(ByVal vNewValue As Variant)

Txt = vNewValue

End Property

Текст модуля, в котором используется экземпляр объявленного класса

Sub ИспользуемКласс1()

'Объявляем переменную и создаем экземпляр класса Класс1

Dim r As Класс1

Set r = New Класс1

'Изменяем значения свойства экземпляра Класса1

r.Text = "Текст объекта"

'Выводим значения свойства экземпляра Класса1

MsgBox r.Text

End Sub

В примере ниже показан текст программы модуля класса, который имеет имя - Оценка, а также текст модуля макросов, в процедуре которого используют объекты-экземпляры класса Оценка. ( В данном примере функции ИмяОценки и ИндексОценки описаны в модуле класса как Property. Но мы в окне сообщения об ошибке выводим текст “Ошибка во входном параметре метода” из-за того, что данные свойства имеют входные параметры и их вызов подобен вызову метода.)

текст модуля класса Оценка.

'Объявляем поля модуля класса

Public Count As Long

Private Ocenka() As String

Private Sub Class_Initialize()

'Объявляем количество оценок по умолчанию и имена оценок

Count = 5

ReDim Ocenka(1 To Count)

Ocenka(1) = "Отвратительно"

Ocenka(2) = "Неудовлетворительно"

Ocenka(3) = "Удовлетворительно"

Ocenka(4) = "Хорошо"

Ocenka(5) = "Отлично"

End Sub

Private Sub Class_Terminate()

'высвобождаем память занятую массивом имен оценок

Erase Ocenka

End Sub

Public Property Get ИмяОценки(ИндексОценки As Long) As String

If ИндексОценки < 1 Or ИндексОценки > Count Then

MsgBox "Ошибка в значении входного параметра метода ИмяОценки объекта класса Оценка"

End

End If

ИмяОценки = Ocenka(ИндексОценки)

End Property

Public Property Get ИндексОценки(ИмяОценки As String) As Long

Dim i As Long

For i = 1 To Count

If UCase(Ocenka(i)) = UCase(ИмяОценки) Then

ИндексОценки = i

Exit Property

End If

Next i

MsgBox "Ошибка в значении входного параметра метода ИндексОценки объекта класса Оценка"

End

End Property

Public Property Let СменитьИмяОценки(ИндексОценки As Long, ИмяОценки As String)

If ИндексОценки < 1 Or ИндексОценки > Count Then

MsgBox "Ошибка в значении входного параметра свойства СменитьИмяОценки объекта класса Оценка"

End

End If

Ocenka(ИндексОценки) = ИмяОценки

End Property

Public Property Get NewCount() As Long

'Индекс новой оценки, которая будет добавленна

методом ДобавитьОценку

NewCount = Count + 1

End Property

Public Sub ДобавитьОценку(ИмяОценки As String)

Count = Count + 1

ReDim Preserve Ocenka(1 To Count)

Ocenka(Count) = ИмяОценки

End Sub

Public Sub УдалитьОценку()

If Count > 1 Then

Count = Count - 1

ReDim Preserve Ocenka(1 To Count)

End If

End Sub

Текст подпрограммы в модуле макросов

Sub ИспользованиеКлассаПользователя()

'Объявляем переменную и создаем экземпляр класса Оценка

Dim Ocenka As Оценка

Set Ocenka = New Оценка

'Объявляем переменную, и, одновременно создаем

экземпляр класса Оценка

Dim Ocenka1 As New Оценка

'Выводим в окно отладки текущее количество оценок объекта Ocenka

Debug.Print "Оценок=" & Ocenka.Count

'Выводим в окно отладки индекс и название первой оценки

Debug.Print "1 - " & Ocenka.ИмяОценки(1)

'Меняем название первой оценки

Ocenka.СменитьИмяОценки(1) = "Безобразно"

Debug.Print "1 - " & Ocenka.ИмяОценки(1)

'Добавляем новую оценку в список

Ocenka.ДобавитьОценку "Гениально"

'Выводим индекс оценки "Гениально"

Debug.Print "Индекс оценки 'Гениально' -" _

& Ocenka.ИндексОценки("Гениально")

'Выводим в окно отладки индекс и название последней оценки списка

Debug.Print Ocenka.Count & " - " & Ocenka.ИмяОценки(Ocenka.Count)

'Удаляем последнюю оценку из списка

Ocenka.УдалитьОценку

Debug.Print "Оценок=" & Ocenka.Count

'Высвобождаем память, занятую экземпляром класса

Set Ocenka = Nothing

'Выводим в окно отладки текущее количество оценок в объекте

Ocenka1

Debug.Print "Оценок в объекте Ocenka1=" & Ocenka1.Count

Debug.Print "1 -" & Ocenka1.ИмяОценки(1)

'Индекс новой оценки объекта Ocenka1,

которая будет добавлена методом ДобавитьОценку

Debug.Print "Индекс новой оценки -" & Ocenka1.NewCount

Set Ocenka1 = Nothing

End Sub

После запуска процедуры ИспользованиеКлассаПользователя из редактора VBA. В окно отладки выведется следующий текст:

Оценок=5

1 - Отвратительно

1 - Безобразно

Индекс оценки 'Гениально' -6

6 - Гениально

Оценок=5

Оценок в объекте Ocenka1=5

1 -Отвратительно

Индекс новой оценки –6

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]