
- •Часть 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
Создание событий пользовательского класса
В примере ниже нами приведен текст модуля класса. Экземпляр класса создается внутри модуля формы. Форма должна содержать на себе три объекта TexBox1,TextBox2, TextBox3(см. рис.26).
Рис. 26 Форма экземпляра класса
Через событие NoNuber объекта Events1 запрещается вводить не цифры в объекты TexBox1,TextBox2, и запрещается вводить точку (.) в объект TexBox1. Символы в TexBox3 вводятся без ограничения.
'Модуль класса Events
Option Explicit
'Объявляем событие класса
Public Event NoNuber(ByVal IndexObjec As Long, DelSimbol As String)
'Объявляем переменную для разрешения запуска события
Private EventsFormComponent As Boolean
'Объявляем переменную, указатель на пользовательскую форму
Private Form As UserForm
Private Sub FormComponent()
Dim IComponent As Variant, s As String, s1 As String, i As Long
Do While EventsFormComponent = True
'Прерываем работу подпрограммы события
DoEvents
'Опрашиваем все компоненты на форме указателе
For IComponent = 0 To Form.Controls.Count - 1
'Если компонент TextBox
If TypeName(Form.Controls(IComponent)) = "TextBox" Then
'Берем текст на объекте
s = Form.Controls(IComponent).Text
s1 = ""
i = Len(s)
'Удаляем не цифру, и вторую точку текста
While s <> ""
If Mid(s, 1, 1) >= "0" And Mid(s, 1, 1) <= "9" _
Or Mid(s, 1, 1) = "." And (InStr(s1, ".") = 0 Or s1 = "") Then
s1 = s1 + Mid(s, 1, 1)
End If
s = Mid(s, 2)
Wend
'Если текст содержал не цифру, или содержал точку
'запускаем событие
If Len(s1) <> i Or InStr(s1, ".") <> 0 Then
'Запускаем событие NoNuber
RaiseEvent NoNuber(IComponent, s1)
End If
End If
Next IComponent
Loop
End Sub
Public Property Set StartEvents(ByRef FormObject As UserForm)
'Устанавливаем указатель на пользовательскую форму
Set Form = FormObject
'Запускаем событие
EventsFormComponent = True
FormComponent
End Property
Public Sub StopEvents()
'Запрещаем выполнения события
EventsFormComponent = False
End Sub
'Модуль формы
'Объявляем переменную класса содержащего события
Private WithEvents Events1 As Events
Private Sub Events1_NoNuber(ByVal IndexObjec As Long, DelSimbol As String)
Dim s As String, Name As String
Name = Me.Controls(IndexObjec).Name
s = DelSimbol
If Name = "TextBox1" Then
'Удаляем точку
If InStr(s, ".") <> 0 Then
s = Mid(s, 1, InStr(s, ".") - 1)
End If
'Удаляем не цифру и точку в объекте TextBox1
Me.Controls(IndexObjec).Text = s
ElseIf Name = "TextBox2" Then
'Удаляем не цифру в объекте TextBox2
Me.Controls(IndexObjec).Text = s
End If
End Sub
Private Sub UserForm_Activate()
'Инициализируем класс
Set Events1 = New Events
'Запускаем событиe класса
Set Events1.StartEvents = Me
End Sub
Private Sub UserForm_Initialize()
'Очищаем текстовые редакторы
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Останавливаем событие класса и снимаем указатель
Events1.StopEvents
Set Events1 = Nothing
'Выгружаем форму
Unload Me
End Sub