
- •Часть 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
Удаление меню
Меню пользователя можно удалить через свойство Delete. Через свойство Reset можно очистить меню пользователя или меню приложения от добавленных пунктов. Если пользователь через программный код скрыл пункты меню приложения, то метод Reset сделает их видимыми. Т.к. этот метод восстанавливает стандартный вид меню приложения.
Пример:
Application.CommandBars("Имя меню").Delete
Добавление пунктов в меню
Пункт в меню добавляется методом Add объекта Controls, который является потомком объектов CommandBars и ActiveMenuBar.
Пример:
With CommandBars("Имя меню")
‘Установка указателя на объект
‘добавляющий пункт меню
Set mButton = _
.Controls.Add(Type:=msoControlButton, ID:=850)
With mButton
‘задание свойств пункта меню
.Caption = ”Мой пункт”
.OnAction = ”МойПункт”
End with
End with
В данном примере добавляется дополнительный пункт меню первого уровня. Входной не обязательный параметр Type метода Add используется для установки соответствующего типа добавляемого подпункта меню. Наиболее часто употребляемые значения этого свойства: msoControlButton – подпункт меню не содержит в себе других подпунктов, msoControlPopup – подпункт меню имеет продолжающийся список подпунктов следующего уровня. Если не обязательный, входной параметр ID метода Add имеет значение 850, то добавляемый пункт меню становится выделенным. После создания пункта меню задаются его свойства, о которых рассказано нами в главе Свойства и методы пункта меню.
Ниже приведены процедуры, предназначенные для добавления пунктов меню:
Private Sub ДанныеМеню(s As String, _
Группа As Boolean, Пиктограмма As String, _
ИмяСобытия, Подпись, id1 As Long)
Dim s1 As String, i as long
If InStr(s, ",") <> 0 Then
s1 = Mid(s, InStr(s, ",") + 1)
s = Mid(s, 1, InStr(s, ",") - 1)
Else
s1 = ""
End If
If Mid(s, 1, 1) = "_" Or Mid(s, 1, 1) = "-" Then
s = Mid(s, 2)
Группа = True
Else
Группа = False
End If
Пиктограмма = ""
While Mid(s, 1, 1) >= "0" _
And Mid(s, 1, 1) <= "9"
Пиктограмма = Пиктограмма + Mid(s, 1, 1)
s = Mid(s, 2)
Wend
If InStr(s, ";") <> 0 Then
ИмяСобытия = Mid(s, 1, InStr(s, ";") - 1)
Подпись = Mid(s, InStr(s, ";") + 1)
Else
ИмяСобытия = ""
For i = 1 To Len(s)
If Mid(s, i, 1) <> "&" _
And Mid(s, i, 1) <> " " Then
ИмяСобытия = ИмяСобытия + Mid(s, i, 1)
End If
Next i
Подпись = s
End If
If Подпись <> "" Then
If Mid(Подпись, Len(Подпись), 1) = " " Then
id1 = 850
Else
id1 = 1
End If
End If
Подпись = RTrim(Подпись)
s = s1
End Sub
Private Sub Добавление(Mbar, ByVal s As String)
Dim mButton As Variant, Пункт As Long, i As Long
Dim Пиктограмма As String, Группа As Boolean
Dim ИмяСобытия, Подпись, id1 As Long
ДанныеМеню s, Группа, Пиктограмма, _
ИмяСобытия, Подпись, id1
With Mbar
For i = 1 To 850 Step 849
If s = "" Then
Set mButton = _
.Controls.Add(Type:=msoControlButton, ID:=i)
Else
Set mButton = _
.Controls.Add(Type:=msoControlPopup)
End If
With mButton
Пункт = .Index
.Caption = Подпись
If i = 1 Then
.BeginGroup = Группа
End If
If s = "" Then
.OnAction = ИмяСобытия
If Пиктограмма <> "" Then
.FaceId = Val(Пиктограмма)
End If
If i = id1 Then
.Visible = True
Else
.Visible = False
End If
Else
Exit For
End If
End With
Подпись = Подпись + " "
Next i
End With
While s <> ""
ДанныеМеню s, Группа, Пиктограмма, _
ИмяСобытия, Подпись, id1
With Mbar.Controls(Пункт)
For i = 1 To 850 Step 849
Set mButton = _
.Controls.Add(Type:=msoControlButton, ID:=i)
With mButton
.Caption = Подпись
.OnAction = ИмяСобытия
If i = 1 Then
.BeginGroup = Группа
End If
If Пиктограмма <> "" Then
.FaceId = Val(Пиктограмма)
End If
If i = id1 Then
.Visible = True
Else
.Visible = False
End If
End With
Подпись = Подпись + " "
Next i
End With
Wend
End Sub
Sub ДобавитьПункты(ИмяМеню, _
ParamArray ПунктыМеню())
Dim m As Variant, Mbar As Variant
If ИмяМеню = "" Then
ИмяМеню = Application.CommandBars.ActiveMenuBar.Name
End If
Set Mbar = Application.CommandBars(ИмяМеню)
For Each m In ПунктыМеню
Добавление Mbar, m
Next m
End Sub
Sub ДобавитьПункты2(ИмяМеню, _
ПунктМеню1, ParamArray ПунктыМеню())
Dim m As Variant, Mbar As Variant, Index As Long
Dim Пиктограмма As String, Группа As Boolean
Dim ИмяСобытия, Подпись, id1 As Long
If ИмяМеню = "" Then
ИмяМеню = Application.CommandBars.ActiveMenuBar.Name
End If
Set Mbar = Application.CommandBars(ИмяМеню)
With Mbar
ДанныеМеню (ПунктМеню1), Группа, _
Пиктограмма, ИмяСобытия, Подпись, id1
With .Controls.Add(Type:=msoControlPopup)
Index = .Index
.Caption = Подпись
.BeginGroup = Группа
End With
End With
Set Mbar = _
Application.CommandBars(ИмяМеню).Controls(Index)
For Each m In ПунктыМеню
Добавление Mbar, m
Next m
End Sub
Данные процедуры необходимо создать в модуле макросов, того проекта, откуда будут добавляться пункты.
Для непосредственного добавления пунктов в меню используются подпрограммы ДобавитьПункты, ДобавитьПункты2.
Ниже приведена инструкция по входным параметрам данных процедур:
1) Необходимо задать имя меню. Если параметр ИмяМеню процедуры добавляющей пункты имеет значение пустой строки, то пункты добавляются в главное меню приложения.
Имена стандартных контекстных меню приложения Word следующие:
"Text" -контекстное меню на выделенном тексте
"Curve" - контекстное меню на выделенных линиях
"Shapes" - контекстное меню на выделенных автофигурах
Имена стандартных контекстных меню приложения Excel следующие:
"Cell" -контекстное меню на выделенных ячейках
"Row" - контекстное меню на выделенных строках
“Column” – контекстное меню на выделенных столбцах
2) Необходимо ввести имена событий в строковом формате через запятую.
3)Имя события не должно содержать пробелов и символа &.
4)Если нужно записать и имя события пункта меню, и подпись пункта меню их разделяют точкой с запятой.
5)Если во введенном имени события содержатся пробелы и символ &, то эти символы автоматически удаляются из имени события, и если не указана подпись пункта меню, то в подпись пункта меню передается имя события с запретными символами.
6)Перед именем события пункта меню можно ввести цифры, которые зададут код пиктограммы пункта меню(см. Коды пиктограмм пунктов меню). Но пункт меню, который имеет подпункты, не может иметь пиктограммы.
7)Перед именем события пункта меню и перед цифрами задающими пиктограмму пункта меню можно ввести символ подчеркивания “_”, или символ минус “-”, при этом пункт меню будет отделен от других пунктов разделительной линией.
8) Если необходимо подчеркнуть букву подписи, перед ней ставят символ &
9) Если необходимо пометить пункт меню то подпись пункта меню должна заканчиваться пробелом (пункт меню, который имеет подпункты, не может быть выделен).
10) Во входных параметрах ПунктыМеню могут иметься подпункты, которые отделяются от основного пункта меню запятой.
11) Процедурой ДобавитьПункты можно добавить несколько пунктов первого уровня, и подпункты к ним. Процедурой ДобавитьПункты2 можно добавить только один пункт первого уровня (за один запуск данной процедуры), но к этому пункту можно добавить подпункты как второго, так и третьего уровня.
12) Перед добавлением пунктов меню необходимо создать внутри проекта, из которого добавляются пункты меню, модуль макросов, который будет содержать в себе процедуры, имена которых совпадают с именами событий пунктов меню(для пунктов меню, которые имеют подпункты, их задавать не требуется, так как процедуры ДобавитьПункты не задают соответствующие свойство OnAction для данных пунктов меню. см. Свойства и методы пунктов меню).
Пример:
‘Добавление пунктов в стандартное
‘контекстное меню “Text” приложения Word
ДобавитьПункты2 "Техt", "Первый", _
"ВторойПункт;Второй пункт,ДТретий", "-3Третий"
рис 23 Последние добавленные пункты в контекстное меню “Text”
Примечание:
Если вы хотите добавить в меню подпункты четвертого и далее уровня, то вам необходимо дорастить пункт меню третьего уровня односеансным контекстным меню (см. Односеансное контекстное меню)