
- •Часть 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
Коды пиктограмм пункта меню
Для того, что бы узнать коды пиктограмм пунктов меню, необходимо создать приведенные ниже процедуры. И запустить процедуру FaceIdPicture. Для продолжения вывода пиктограмм необходимо нажать клавишу Enter, для завершения – необходимо выбрать пункт в контекстном меню “Выход”:
Sub FaceIdPicture()
Dim i As Long, k As Long, n As Byte
Dim mButton As CommandBarButton
k = 1
Do
n = 0
Set MBar = _
Application.CommandBars.Add(, msoBarPopup)
With MBar
For i = 1 To 26
n = n + 1
Set mButton = .Controls.Add(Type:=msoControlButton)
With mButton
If i = 26 Then
.Caption = "Выход"
.OnAction = "Выход"
Else
.Caption = CStr(k)
If k <= 3518 Then
.FaceId = k
k = k + 1
End If
End If
End With
Next i
.ShowPopup
.delete
End With
Loop Until k > 3518
End Sub
Sub выход()
End
End Sub
Односеансное контекстное меню
Можно создать односеансное контекстное меню. Такое меню наиболее удобно внутри приложения Excel. Т.к. в данном приложении лист Excel имеет событие, которое отлавливает нажатие правой клавиши мыши на нем. Что позволяет заблокировать вывод стандартного контекстного меню, и вывести вместо него свое. К сожалению, документ Word не имеет такого события, и в приложении Word возможно только добавление пунктов в стандартные контекстные меню. Поэтому в приложении Word функцию СоздатьКонтекстноеМеню можно запускать только как процедуру, для продолжения подпунктов меню третьего уровня (О чем рассказано в конце данной главы).
Для того, что бы заблокировать контекстное меню на листе Excel необходимо в модуле соответствующего листа, в событийной процедуре BeforeRightClick установить значение входного параметра Cansel на True. Через свойства Column и Row обьекта Target можно заблокировать вывод стандартного контекстного меню в определенной области листа.
Пример:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)
If Target.Column <= 2 And Target.Row <= 4 Then
Cancel = True
End If
End Sub
В данном примере заблокировано стандартное контекстное меню до второго столбца и четвертой строки листа Excel включительно.
Для создание контекстного меню необходимо в модуле макросов проекта создать функцию:
Function СоздатьКонтекстноеМеню(ParamArray ПунктыМеню())
Dim mButton As Variant, m As Variant, Mbar As Variant
Dim n As Long, Пиктограмма As String, Группа As Boolean
Dim s As String, ИмяСобытия, Подпись, id1 As Long
Set Mbar = Application.CommandBars.Add(, msoBarPopup)
For Each m In ПунктыМеню
s = m
ДанныеМеню s, Группа, Пиктограмма, ИмяСобытия, Подпись, id1
With Mbar
If s = "" Then
Set mButton = .Controls.Add(Type:=msoControlButton, ID:=id1)
Else
Set mButton = .Controls.Add(Type:=msoControlPopup)
End If
With mButton
.Caption = Подпись
If s = "" Then
.OnAction = ИмяСобытия
If Пиктограмма <> "" Then
.FaceId = Val(Пиктограмма)
End If
End If
.BeginGroup = Группа
n = .Index
End With
End With
While s <> ""
ДанныеМеню s, Группа, Пиктограмма, ИмяСобытия, Подпись, id1
With Mbar.Controls(n)
Set mButton = .Controls.Add(Type:=msoControlButton, ID:=id1)
With mButton
.Caption = Подпись
.OnAction = ИмяСобытия
.BeginGroup = Группа
If Пиктограмма <> "" Then
.FaceId = Val(Пиктограмма)
End If
End With
End With
Wend
Next m
Mbar.ShowPopup
СоздатьКонтекстноеМеню = True
Mbar.Delete
End Function
В том же модуле необходимо иметь процедуру ДанныеМеню, которая нами описана в главе Добавление пунктов в меню. В той же главе рассказано о входном параметре ПунктыМеню процедуры ДобавитьПункты. Этот параметр соответствует параметру ПунктыМеню функции СоздатьКонтекстноеМеню. Переключать в пункте односеансного контекстного меню строится не так, как переключатель созданный процедурами ДобавитьПункты.
Пример:
‘событийная процедура внутри модуля листа
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, _
Cancel As Boolean)
If flag = False Then
Cancel = СоздатьКонтекстноеМеню("Мой пункт")
Else
Cancel = СоздатьКонтекстноеМеню("Мой пункт ")
End If
End Sub
‘программный код внутри модуля макросов
‘в котором находится соответствующий лист
Public flag As Boolean
Sub МойПункт()
flag = Not flag
End Sub
В данном примере создается на листе Excel контекстное меню с переключающимся пунктом.
Функцию СоздатьКонтекстноеМеню можно запускать и как процедуру, например, для продолжения подпунктов второго уровня, непосредственно из событийных процедур пунктов меню второго уровня(в приложении Word данную функцию нужно запускать из подпунктов меню третьего уровня).
Пример:
‘событийная процедура внутри модуля листа
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, _
Cancel As Boolean)
Cancel = CоздатьКонтекстноеМеню( _
"ПервыйУровень,186ВторойУровень1,ВторойУровень2")
End Sub
‘программный код внутри модуля общих подпрограмм проекта
‘в котором находится соответствующий лист
Sub ВторойУровень1()
СоздатьКонтекстноеМеню "Третий Уровень1", "Третий Уровень2"
End Sub
В данном примере после нажатия правой клавишей мыши на соответствующем листе и после выбора соответствующих пунктов меню, контекстное меню примет вид:
рис 24 Контекстное меню пользователя