2.8.Создание меню
2.8.7.Контекстное меню


Методы создания строк меню и их элементов управления можно применить к разработке контекстного меню.

 

Для построения контекстного меню надо:

1.    Создать контекстное меню.

2.    Добавить в контекстное меню элементы управления и связать с ними макросы.

3.    Задать момент вывода контекстного меню,

4.    Позаботиться о том, чтобы после вывода пользовательского контекстного меню не отображалось встроенное в Excel контекстное меню.

 

Первые два пункта намеченной программы реализуются точно так же, как и при построении обычного меню. Созданное контекстное меню отображает­ся на экране методом showPopup объекта CommandBar. Для задания момента отображения контекстного меню лучше всего подходит процедура обработ­ки события SheetBeforeRightciick объекта workbook. Параметры этой про­цедуры sh и Target позволяют локализовать место в рабочей книге, в кото­ром это меню должно отображаться, а именно, рабочий лист и диапазон. Если необходимо отображение контекстного меню при нажатии правой кнопки мыши в любом месте любого рабочего листа книги, то о значениях параметров sh и Target нет нужды беспокоиться. Установив значение пара­метра Cancel процедуры обработки события SheetBeforeRightciick объекта workbook равным True можно отключить выполнения тех функций, которые по умолчанию связаны с нажатием правой кнопки мыши. Следующий код (листинг 2.10) демонстрирует технику создания контекст­ного меню на примере меню, состоящего из двух элементов, и выпадающего меню, имеющего также два элемента. Отображение пользовательского кон­текстного меню произойдет при щелчке правой кнопкой мыши в ячейке А1.

 


 

Листинг 2.10.а Контекстное меню. Модуль рабочего листа

Private Sub Workbook_Open()

   BuilderPopUpMenu

End Sub

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

   KillerPopUpMenu

End Sub

 

Private Sub Workbook_SheetBeforeRightClick(_

                                 ByVal Sh As Object, _

ByVal Target As Range, _

Cancel As Boolean)

If Not(Application.Intersect(Target,Range("a1"))Is Nothing) Then

  Application.CommandBars("TemporaryPopupMenu").ShowPopup

  Cancel = True

 End If

End Sub

 

Листинг 2.10.б Контекстное меню. Стандартный модуль

Sub BuilderPopUpMenu()

Dim cb As CommandBar

Dim cbPopUp As CommandBarPopup

Set cb = Application.CommandBars.Add(_

Name:="TemporaryPopupMenu",_

Position:=msoBarPopup)

With cb

With .Controls.Add(Type:=msoControlButton)

.OnAction = "MyMacroName"

.FaceId = 71

.Caption = "Item 1"

.Tag = "Item 1"

.TooltipText = "Tooltip For Item 1"

End With

 

With .Controls.Add(Type:=msoControlButton)

.OnAction = "MyMacroName"

.FaceId = 72

.Caption = "Item 2"

.Tag = "Item 2"

.TooltipText = "Tooltip For Item 2"

End With

 

Set cbPopUp = .Controls.Add(Type:=msoControlPopup)

With cbPopUp

.BeginGroup = True

.Caption = "Sub Menu"

With .Controls.Add(Type:=msoControlButton)

.OnAction = "MyMacroName"

.FaceId = 71

.Caption = "SubItem 1"

.Tag = "Subitem 1"

.TooltipText = "Tooltip For Subitem 1"

End With

With .Controls.Add(Type:=msoControlButton)

.OnAction = "MyMacroName"

.FaceId = 72

.Caption = "Subitem 2"

.Tag = "Subitem 2"

.TooltipText = "Tooltip For Subitem 2"

End With

   End With

End With

 

Set cbPopUp = Nothing

Set cb = Nothing

End Sub

 

Sub KillerPopUpMenu()

On Error Resume Next

CommandBars("TemporaryPopupMenu").Delete

On Error GoTo 0

End Sub

 

Добавление пункта в контекстное меню


Листинг 2.11 Контекстное меню. Стандартный модуль

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _

        Cancel As Boolean)

    Dim icbc As Object

    For Each icbc In Application.CommandBars("cell").Controls

        If icbc.Tag = "brccm" Then icbc.Delete

    Next icbc

    If Not Application.Intersect(Target, Range("b1:b10")) _

        Is Nothing Then

            With Application.CommandBars("cell").Controls _

                .Add(Type:=msoControlButton, before:=6, _

                temporary:=True)

           .Caption = "Мой пункт контекстного меню"

           .OnAction = "MyMacro"

           .Tag = "brccm"

       End With

    End If

End Sub





  
ПОИСК
МОЯ КНОПКА
Контакты
МБОУ "Лицей им.Атякшева"

628260 г. Югорск, ул. Ленина 24,
ХМАО-Югра, Тюменская область
Телефон: 8 (34675)2-48-30
Факс: 8 (34675)2-48-30



89222596815 nady_er@mail.ru
Карта
sample map