
- •Часть 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
После выбора пункта ПервыйУровень
рис 25 Контекстное меню пользователя
После выбора пункта ВторойУровень1 Назначение управляющих клавиш к пункту меню
Т.к. пункт меню через свойство OnAction может быть связан с процедурой не имеющей входных параметров, а процедура без входных параметров в VBA для Word и Excel является макросом, то назначение управляющих клавиш для соответствующих макросов, соответствует назначению управляющих клавиш для пунктов меню, которые закреплены за ними.
Управляющие клавиши для макросов могут быть назначены через меню приложения и программно.
( см. Приложение 2 - Назначение управляющих клавиш для запуска готового макроса)
Приложение 4 ( Программная обработка модулей vba ) Введение
Часто требуется автоматически (программно) прописать модуль в другой проект, или сделать инсталляцию для установки подпрограмм в модули других проектов. Этой теме и посвящено данное приложение.
Под “ИмяФайлаПроекта” в программных конструкциях, которые мы разбираем ниже, подразумевается соответствующий объект. Для связи с книгой Excel подразумевается объект - Workbooks("Имя книги"), а для связи с документом Word объект - Documents(“Имя документа”). Объект для связи с документом, который содержит личные макросы приложения Word, имеет имя: NormalTemplate, в Excel приложении данный объект записывается следующим образом: Workbooks("PERSONAL").
Экспорт модуля проекта в файл
Модуль VBA можно экспортировать в файл следующей программной конструкцией:
ИмяФайлаПроекта.VBProject.VBComponents.Item("Имя модуля") _
.Export "Путь и ИмяФайла"
Примечание:
Модуль экспортируется для последующего импорта в другой проект. Причем, в ряде случаев, модуль может быть использован не только в проектах VBA, но и в проекте VB.
Импорт модуля проекта из файла
Модуль VBA можно импортировать из файла следующей программной конструкцией:
ИмяФайлаПроекта.VBProject.VBComponents.Import "Путь и ИмяФайла"
Примечание:
В ряде случаев для импорта модуля, можно использовать не только модуль проекта VBA, но и модуль проекта VB.
Импорт модуля через “организатор” (данный код только для Word приложения)
В приложении Word можно импортировать модуль через “организатор”. Проект, содержащий импортируемый модуль и принимающий его должны быть загружены в приложение Word.
Application.OrganizerCopy Source:= _
“Путь и имя проекта откуда берется модуль”, Destination:= _
“Путь и имя проекта куда импортируется модуль”, _
Name:="Имя модуля", Object :=wdOrganizerObjectProjectItems
Вставка новых строк в модуль проекта
ИмяФайлаПроекта.VBProject.VBComponents _
.Item("Имя модуля").CodeModule.InsertLines №, S
Где
№ - Номер строки в модуле, с которой будут вставляться новые строки
S – Вставляемая строка символов
Примечание:
В переменной S могут содержаться коды символов конца строк , которые можно получить следующей функцией со следующим аргументом: CHR(13). Таким образом, переменная S может содержать в себе сразу несколько строк:
S = “Первая строка”+ chr(13)+”Вторая строка” _
+ chr(13)+”Третья строка” ‘ и т.д.
Удаление строк из модуля
ИмяФайлаПроекта..VBProject.VBComponents.Item("Имя модуля").CodeModule.DeleteLines №, Количество
Где
№ - Номер строки в модуле, с которой будут удаляться строки
Количество – количество удаляемых строк
Чтение строк из модуля
ИмяФайлаПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.Lines(№,Количество)
Где
№ - Номер строки в модуле, с которой будет начинаться чтение строк
Количество – количество читаемых строк
Определение количества строк в модуле
ИмяФайлаПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.CountOfLines
Переименование модулей проекта
ИмяФайлаПроекта.VBProject.VBComponents.Item(“ИмяМодуля”).Name =”Новое имя модуля”
Удаление модулей проекта
ИмяФайлаПроекта.VBProject.VBComponents.Remove _
ИмяФайлаПроекта.VBProject.VBComponents.Item("ИмяМодуля")
Определение количества модулей в проекте
ИмяФайлаПроекта.VBProject.VBComponents.Count
Создание нового модуля проекта
‘Создаем новый модуль макросов
ИмяФайлаПроекта.VBProject.VBComponents.Add vbext_ct_StdModule
‘Определяем индекс созданного модуля
k = ИмяФайлаПроекта.VBProject.VBComponents.Count
‘даем свое имя модулю
ИмяФайлаПроекта.VBProject.VBComponents.Item(k).Name = "Новое имя модуля"
Приложение 5 (Создание модуля класса)
Введение
Модуль класса проекта создается через меню редактора VBA Вставка-Модуль класса(Insert-Class Module). После создания модуля класса его переименовывают через окно свойств. Имя модуля будет соответствовать имени класса. Модуль класса может содержать в себе две событийные процедуры с заголовками “Private Sub Class_Initialize()” – для инициализации переменных модуля класса, и, “Private Sub Class_Terminate()” - для освобождения памяти занятой переменными модуля класса во время прекращения его работы c объектной переменной. Модуль класса может содержать специализированные процедуры и функции типа Property, формат объявления этих процедур следующий:
[PRIVATE / PUBLIC] [Static] Property Get / Let / Set ИМЯ_процедуры(Входные параметры процедуры) [as Тип]
Тело процедуры
.
[Exit Property]
.
END SUB
Property Get является функцией. В ней, входные параметры могут отсутствовать. Данная функция выдает значение определенного свойства модуля класса.
Property Let - процедура, которая должна содержать хотя бы один входной параметр. Данная процедура используется для изменения значения тех свойств модуля класса, которые не являются объектными переменными.
Property Set - процедура, которая должна содержать хотя бы один входной параметр. Данная процедура используется для создания ссылки на объектные переменные модуля класса.
Часто функция Property Get и процедура Property Let имеют одно и тоже имя, причем через функцию Property Get получают значение свойства, а через процедуру Property Let задают значения того же свойства. Автоматически вставить в модуль класса две одноименные подпрограммные конструкции можно через меню редактора VBA – Вставка-Процедура(Insert-Procedure). Далее необходимо в появившемся окне ввести для них имя и выбрать тип вставляемых подпрограмм - Свойства(Property) и нажать кнопку OK.
После того, как создан модуль класса, возможно создание одного, и более экземпляров созданного класса. Экземпляр класса можно создать оператором New (см. соответствующую главу или примеры в последующих параграфах данного приложения).
В версиях Excel старше 1997 года возможно создание класса, содержащего события. Событие объявляется в главной области модуля класса следующим образом:
[ Private/ Public ] Event ИмяСобытия( [входные параметры])
Событие инициализируется(запускается) из модуля класса следующим образом:
RaiseEvent ИмяСобытия( [входные параметры])
Для того, чтобы создать экземпляр класса имеющего события необходимо в главной области модуля формы объявить экземпляр:
[ Private/ Public ] WithEvents ИмяПеременной As [ New ] ИмяКласса
Если класс сделан правильно, то после объявления объектной переменной в модуле формы вышеуказанном образом, в левом, верхнем поле со списком появляется имя объявленного объекта, а в правом его события.
Если при объявлении экземпляра класса не использовалось служебное слово New, необходимо инициализировать экземпляр класса следующим образом:
Set ИмяПеременной = New ИмяКласса
Событие целесообразно инициализировать из цикла следующим образом:
Do While Условие_Выполнения_Цикла
DoEvents
If Условие_Выполнения_События Then
RaiseEvent ИмяСобытия( [входные параметры])
End if
Loop
В Условие_Выполнения_Цикла можно использовать глобальную переменную, позволяющую прекратить выполнение цикла Do из другой процедуры. DoEvents – позволяет прервать работу процедуры в которой находится цикл Do и передать управление на некоторое время форме. Оператор If запукает в нужный момент событие класса.