Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

726 Часть VI. Разработка приложений

Настройка контекстных меню с помощью VBA

В этом разделе будут рассмотрены некоторые практические примеры кода VBA, ко­ торый работает с контекстными меню Excel. Эти примеры дают представление о том, что можно делать с контекстными меню с помощью VBA, а соответствующий им код можно изменять произвольным образом.

Сброс контекстных меню

Метод R eset восстанавливает исходное состояние контекстного меню. Следующая процедура возвращает исходное состояние контекстного меню ячейки.

Sub

R ese tC ellM en u ()

 

CommandBars( " C e ll" ) .R eset

End

Sub

Как отмечалось ранее, Excel включает два контекстных меню ячейки. Приведенный выше пример кода восстанавливает только первое меню (с индексом 35). Для восстанов­ ления исходного состояния второго контекстного меню ячейки подставьте значение его индекса (38) вместо значения индекса первого меню. Поскольку номера индексов отли­ чаются в различных версиях Excel, ниже представлена усовершенствованная процедура, которая восстанавливает оба контекстных меню ячейки.

Sub

R ese tC ellM en u ()

 

 

Dim

cb a r

As CommandBar

 

For

Each

cb ar In

A p p lic a tio n . CommandBars

 

I f cbar.Name

= " C e ll" Then cb a r.E n a b le d = F alse

 

N ext

cb a r

 

 

End

Sub

 

 

 

Следующая процедура восстанавливает исходное состояние всех встроенных панелей инструментов.

Sub

R e s e tA llO

 

 

Dim

cb a r

As CommandBar

 

For

Each

cb a r In

A p p lic a tio n . CommandBars

 

I f

cb a r.T yp e

= msoBarTypePopup Then

 

 

 

c b a r . Reset

 

 

 

 

c b a r.E n a b le d = True

 

End

I f

 

 

 

N ext

cb a r

 

 

End

Sub

 

 

 

 

 

 

 

П р и м еч ан и е

 

 

 

Если приложение добавляет элементы в контекстное меню, после закрытия

 

 

 

приложения следует их удалить в индивидуальном порядке. Если просто

 

 

 

восстановить контекстное меню, будут удалены все настройки, выполнен­

 

 

 

ные другими приложениями.

Отключение контекстного меню

Используя свойство E nabled, можно отключить все контекстное меню. Если при­ своить этому свойству значение F a lse , щелчок правой кнопкой мыши на ячейке не приведет к отображению контекстного меню. Следующий оператор отключает контекст­ ное меню ячейки:

A p p lic a tio n . CommandBars( " C e ll" ) . Enabled = F alse

Глава 23. Работа с контекстными меню

727

Для повторной активизации контекстного меню присвойте свойству E nabled значе­ ние True.

Если нужно отключить все контекстные меню, используйте следующую процедуру.

Sub D is a b le A llS h o rtc u tM e n u s ()

Dim

cb

As

CommandBar

For

Each

cb In

CommandBars

I f

cb.Type

= msoBarTypePopup Then _

Next

 

c b .E n a b le d = F a lse

cb

 

 

End Sub

П р ед уп р еж д ен и е

Состояние отключения контекстных меню “замораживается” между рабочи­ ми сеансами. Поэтому перед закрытием Excel лучше восстановить контекст­ ные меню. Для этого измените предыдущую процедуру таким образом, что­ бы свойству Enabled присваивалось значение True.

Отключение элементов контекстного меню

В процессе выполнения приложения иногда нужно отключать один или более эле­ ментов определенного контекстного меню. Если элемент отключен, соответствующий ему текст становится светло-серым и щелчок на нем мышью не дает никакого эффекта. Следующая процедура отключает элемент Скрыть (Hide) контекстных меню Строка (Row) и Столбец (Column).

Sub D isa b le H id e M e n u Ite m s()

 

CommandBars( "C olum n") . C o n tr o ls ( "Скрыть" ) . Enabled

= F alse

CommandBars( "Row") . C o n tro ls ( "Скрыть" ) . Enabled =

F alse

End Sub

 

Добавление нового элемента в контекстное

меню ячейки

Процедура A ddT oShortcut, код которой приведен ниже, добавляет новый элемент в контекстное меню ячейки. Этот элемент называется Перенос по словам (Toggle Word Wrap). Как вы помните, в Excel имеются два контекстных меню ячейки. Рассматривае­ мая в этом разделе процедура изменяет стандартное контекстное меню, причем новое меню не совпадает с тем, которое появляется в режиме просмотра Разметка страницы (Page Break Preview).

Sub A ddT oS hortC ut()

1 Добавление элемента меню в контекстное меню ячейки

Dim Bar As CommandBar

 

 

Dim N ew C ontrol

As

CommandBarButton

D ele teF rom S h ortcu t

 

 

 

Set

Bar = CommandBars( " C e ll")

Set

N ew C ontrol

= B a r. C o n tro ls .A d d _

(Type: = m so C o n tro lB u tto n /

_

te m p o ra ry : = T rue)

 

 

W ith

N ew C ontrol

 

 

 

.C a p tio n

=

"ЬПеренос

по

словам"

.O n A ctio n

=

"ToggleW ordW rap"

.P ic tu re

= A p p lic a tio n . CommandBars. GetImageMso _

 

("W ra p T e xt",

16,

16)

 

лава 23. Работа с контекстными меню

729

П ри м ечан и е

Запомните, что изменения контекстного меню оказывают действие до тех пор, пока не будет перезапущена Excel. Другими словами, измененные кон­ текстные меню не восстанавливаются в исходное состояние после закрытия рабочей книги с кодом VBA. Поэтому, если был создан код, изменяющий контекстное меню, предусмотрите процедуру, которая отменяет результаты изменений.

Процедура D e le te F ro m S h o r tc u t

удаляет новый элемент из контекстного меню

ячейки.

 

Sub D e le te F ro m S h o rtc u t()

 

On E rro r Resume N ext

 

CommandBars( " C e ll" ) . C o n tro ls

_

("&Перенос по словам ") . D e le te End Sub

Как правило, добавление и удаление элементов контекстного меню производится автоматически. Элемент меню добавляется при открытии рабочей книги и удаляется при ее закрытии. Для реализации этой идеи на практике просто добавьте следующие две процедуры обработки событий в модуль кода T h is W o rk b o o k (ЭтаКнига).

P rivate

Sub W orkbook_Open()

C a ll

AddToShortCut

End Sub

 

P rivate

Sub W orkbook_B eforeC lose(C ancel As Boolean)

C a ll

D e le te F ro m S h o rtcu t

End Sub

 

Процедура W orkbook_O pen вызывается после открытия рабочей книги, а процедура W orkbook_B ef o re C lo s e — перед ее закрытием. Именно то, что нужно.

П р и м еч а н и е

Элементы, добавленные в контекстное меню, будут доступны для всех рабо­ чих книг, а не только в книге, в которой они были созданы.

К о м п а к т-д и ск

Рассматриваемая в этом разделе рабочая книга находится на прилагаемом компакт-диске в файле add to c e ll s h o rtc u t .xlsm .

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

Пример, рассматриваемый в этом разделе, добавляет в контекстное меню подменю с тремя опциями. Фактически, подменю добавляется в шесть контекстных меню. На рис. 23.5 показан вид рабочего листа после щелчка правой кнопкой мыши на строке. Каждая из оп­ ций подменю вызывает на выполнение макрос, который изменяет регистр символов в вы­ деленных ячейках.

Следующий код создает подменю, а также входящие в его состав опции.

Sub AddSubmenu ()

1 Добавляет подменю к шести контекстным меню

Dim Bar As CommandBar

Dim NewMenu As CommandBarControl

Dim NewSubmenu As CommandBarButton

De1et eSubmenu