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

После выбора пункта ПервыйУровень

рис 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 запукает в нужный момент событие класса.

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