
- •Часть 2.
- •8 Архитектура проекта
- •8.1 Введение (основные элементы проекта и их построение)
- •8.1.2 Этапы написания проекта
- •Установка (и удаление) элементов управления на лист Excel
- •Установка начальных значения свойств элементов управления
- •Установка порядка расположение элементов управления (установка одного элемента управления над другим)
- •Создание пользовательской формы
- •Создание модулей макросов проекта
- •Создание событийных процедур элементов управления, а так же событийных процедур родительских объектов
- •Быстрый переход в событийную процедуру элемента управления
- •8.1.3 Изменение свойств проекта
- •8.1.4 Установка и снятие защиты проекта
- •9 Доступность подпрограмм и полей модулей проектов
- •9.1 Введение
- •9.2 Надстройки проектов
- •9.2 Ссылка на другой проект
- •10 Отладка кода программы в vba редакторе
- •10.1 “Компиляция” проекта
- •10.2 Запуск подпрограмм, не имеющих входных параметров из редактора vba
- •10.3 Пошаговый запуск подпрограмм, не имеющих входных параметров
- •10.4 Непосредственный запуск формы из редактора vba
- •10.5 Точки останова и оператор Stop
- •10.6 Аварийное прерывание работы программы приложением Excel
- •10.7 Принудительная остановка и принудительное прерывание программы пользователем
- •10.8 Окно локальных переменных и Окно отладки
- •11 Справочная система vba
- •11.1 Переход к справочной системе
- •11.2 Список имен потомков, методов и свойств объектов в окне редактора модуля
- •11.3 Просмотр списка операторов vba в окне редактора модуля (просмотр библиотек)
- •11.4 Окно просмотра свойств, методов, потомков и родителей объектов
- •12 Дополнительная информация
- •12.1 Параметры работы редактора vba
- •12.2 Защита от макровирусов
- •12.3 Причины, по которым код vba проекта может не исполняться
- •Приложение 1 Задание 1 (автозаполнение пола)
- •Задание 2 (автозаполнение комментариев к числам)
- •Задание 3 (заучиватель иностранных слов)
- •Задание 4 (телефонная книжка с поиском)
- •Задание 5 (программирование связей таблиц Excel)
- •Задание 6 (защита служебных полей таблицы Excel)
- •Приложение 2 (Программирование через редактирование макроса) Введение
- •Запись макроса в книгу Excel
- •Запуск макроса из меню.
- •Быстрый переход в код макроса
- •Пример создание процедуры через макрос.
- •Некоторые замечания по запуску макроса из событийных процедур
- •Назначение управляющих клавиш для запуска готового макроса Назначение управляющих клавиш макросам через меню приложений
- •Программное назначение управляющих клавиш макросам
- •Приложение 3( Создание меню ) Введение
- •Типы меню приложений
- •Создание (и удаление) подпунктов главного меню через меню приложений Создание (и удаление) подпункта главного меню
- •Создание (и удаление) пункта меню к макросу
- •Удаление меню
- •Добавление пунктов в меню
- •Свойства и методы пунктов меню
- •Переключатель в пункте меню
- •Коды пиктограмм пункта меню
- •Односеансное контекстное меню
- •После выбора пункта ПервыйУровень
- •После выбора пункта ВторойУровень1 Назначение управляющих клавиш к пункту меню
- •Приложение 4 ( Программная обработка модулей vba ) Введение
- •Экспорт модуля проекта в файл
- •Импорт модуля проекта из файла
- •Импорт модуля через “организатор” (данный код только для Word приложения)
- •Создание свойств и методов пользовательского класса
- •Создание событий пользовательского класса
- •Приложение 6 (Ссылка на приложение ms Office)
- •Приложение 7 (связь с таблицами и запросами базы данных) Введение
- •Связь с базой данных через указатели
- •Непосредственная загрузка таблицы базы данных в Excel таблицу
- •Форма для интерактивной работы с записью таблицы базы данных
- •С записями таблицы базы данных
- •Браузер таблиц и запросов базы данных
- •Методы поиска объекта Recordset
- •Пример использования метода Seek
- •Пример использования методов Find
- •Приложение 8 (Обращение к api-функциям) Введение
- •Скрытие и отображение панели задач через api функции
- •Запуск ярлыка и исполняемых файлов через api функцию
- •Приложение 9 (Основные понятия визуального программирования на доступных примерах)
- •Яблоко1.Сплющить
- •8 Архитектура проекта 3
- •8.1 Введение (основные элементы проекта и их построение) 3
- •Приложение 3( Создание меню ) 64
- •Приложение 4 ( Программная обработка модулей vba ) 90
- •Приложение 5 (Создание модуля класса) 94
- •Приложение 6 (Ссылка на приложение ms Office) 108 Приложение 7 (связь с таблицами и запросами базы данных) 113
- •Часть 2
Создание свойств и методов пользовательского класса
В примере ниже нами приведен текст модуля класса, который имеет только одно свойство, и, пример использования экземпляра данного класса в другом модуле проекта.
‘Текст модуля класса с именем Класс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