Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 3....doc
Скачиваний:
37
Добавлен:
17.12.2018
Размер:
1.65 Mб
Скачать

Пример построения документа с собственным меню

Обобщим приведенные сведения по построению меню и создадим документ, в котором все встроенные меню будут отключены и создано собственное иерархическое меню. На верхнем уровне меню будет состоять из одного пункта, оно будет включать два подменю, каждое из которых содержит по одной команде. Приведем процедуру, реализующую создание такого меню:

Option Explicit

Public Sub CreateCustomMenu()

Dim CstmBar As CommandBar

Dim CstmPopUp1 As CommandBarPopup, CstmPopUp2 As CommandBarPopup

Dim CstmCtrl As CommandBarControl

Dim Exist As Boolean

'Выключаем все панели

For Each CstmBar In CommandBars

CstmBar.Enabled = False

Next CstmBar

'Создаем, включаем и делаем видимой собственную панель

Exist = False

For Each CstmBar In CommandBars

If CstmBar.Name = "Головное меню" Then

Exist = True

Exit For

End If

Next CstmBar

If Not Exist Then

Set CstmBar = CommandBars.Add(Name:="Головное меню", _

Position:=msoBarTop, MenuBar:=True, Temporary:=False)

End If

CstmBar.Enabled = True

CstmBar.Visible = True

'Добавляем меню на панель

Exist = False

For Each CstmCtrl In CstmBar.Controls

If CstmCtrl.Caption = "&Ввод документов" Then

Exist = True

Exit For

End If

Next CstmCtrl

If Not Exist Then

Set CstmCtrl = CstmBar.Controls _

.Add(Type:=msoControlPopup, Before:=1)

CstmCtrl.Caption = "&Ввод документов"

'Добавляем две команды подменю

Set CstmPopUp1 = CstmCtrl.Controls.Add(Type:=msoControlPopup)

CstmPopUp1.Caption = " о движении товаров"

Set CstmPopUp2 = CstmCtrl.Controls.Add(Type:=msoControlPopup)

CstmPopUp2.Caption = " финансовых"

'Добавляем команду в каждое подменю

Set CstmCtrl = CstmPopUp1.Controls.Add(Type:=msoControlButton)

CstmCtrl.Caption = "Накладная"

CstmCtrl.OnAction = "Module1.Invoice"

Set CstmCtrl = CstmPopUp2.Controls.Add(Type:=msoControlButton)

CstmCtrl.Caption = "Счет"

CstmCtrl.OnAction = "Module1.Account"

End If

End Sub

Пример 11.1. (html, txt)

Заметьте, вначале, используя свойство Enabled, были отключены все панели. Затем было сформировано головное меню, содержащее всего один пункт, с двумя подменю и командами. Обратите внимание, перед добавлением нового пункта, обычно делается проверка, а не был ли он уже добавлен. Подобная проверка позволяет избежать ошибок, возникающих при попытках добавить уже существующий пункт или удалить несуществующий. Чтобы наш пример был законченным, приведем процедуры, вызываемые в ответ на выбор команд меню Накладная и Счет:

Public Sub Invoice()

MsgBox ("Накладная!")

End Sub

Public Sub Account()

MsgBox ("Счет!")

End Sub

Вот как выглядит документ по завершении работы процедуры CreateCustomMenu:

Рис. 11.4.  Документ, имеющий собственное меню

В заключение, приведем процедуру, восстанавливающую стандартное окружение:

Public Sub ResetMainMenu()

Dim CstmBar As CommandBar

'Включаем все панели

For Each CstmBar In CommandBars

CstmBar.Enabled = True

Next CstmBar

Set CstmBar = CommandBars.Item("Menu Bar")

CstmBar.Visible = True

End Sub