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

Глава

Работа с контекстными меню

Вэтой главе...

Обзор объекта CommandBar

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

Контекстные меню и события

В Excel 2010 роль объекта CommandBar намного меньше, чем в предыдущих верси­ яхExcel. В этой главе рассматривается применение объекта CommandBar для настройки контекстных меню.

Обзор объекта CommandBar

Объект CommandBar применяется в следующих трех элементах пользовательского интерфейса Excel:

настраиваемые панели инструментов;

настраиваемые меню;

настраиваемые контекстные меню (вызываются щелчком правой кнопкой мыши).

ВExcel 2010 объект CommandBar утратил свои былые лидирующие позиции. Если созданный вами код VBA предназначен для настройки меню или панели инструментов,

Excel перехватывает этот код, игнорируя при этом многие команды. Как отмечалось в главе 22, настройки меню и панели инструментов, выполненные с помощью объекта CommandBar, отображаются в группах Команды меню (Menu Commands) и Настраи­ ваемые панели инструментов (Custom Toolbars), которые находятся во вкладке Над­ стройки (Add-Ins). Поэтому объект CommandBar в Excel 2010 ограничен операциями с контекстными меню.

В этом разделе рассматриваются основные сведения, относящиеся к объекту

CommandBar.

720

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

Типы объектов CommandBar

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

msoBarTypeNormal — панель инструментов (Туре = 0);

msoBarTypeMenuBar — панель меню (Туре = 1);

msoBarTypePopUp — контекстное меню (Туре = 2).

Несмотря на то что панели инструментов и меню не применяются в Excel 2010, эти элементы пользовательского интерфейса остаются в составе объектной модели (для под­ держки совместимости с другими приложениями). Но если в Excel 2010 попытаться ото­ бразить объект CommandBar, для которого значение свойства Туре равно 0 или 1, ус­ пеха вы не достигнете. А в Excel 2003 следующий оператор отобразит на экране панель инструментов Standard (Стандартная):

CommandBars( "S ta n d a rd ") . V is ib le = True

ВExcel 2010 этот оператор игнорируется.

Вэтой главе рассматриваются объекты CommandBar, для которых значение свойства

Туре равно 2 (контекстные меню).

Отображение контекстных меню

В Excel 2010 включено 65 контекстных меню. Каким образом можно получить ин­ формацию о них? Я запустил процедуру ShowShortcutM enuNames (ее код приведен ниже), которая осуществляет циклический обход всех объектов CommandBar. Если зна­ чение свойства Туре будет msoBarTypePopUp (встроенная константа, которая имеет значение 2), в рабочем листе отображается индекс и имя объекта CommandBar.

Sub

ShowShortcutMenuNames()

 

Dim

Row As

Long

 

 

 

 

Dim

cb a r

As

CommandBar

 

 

Row

=

1

 

 

 

 

 

 

For

Each

cb a r In

CommandBars

 

I f

cb a r.T yp e

= msoBarTypePopUp Then

 

 

 

C e lls(R o w ,

1)

=

c b a r.In d e x

 

 

 

C e lls(R o w ,

2)

=

cbar.Name

 

 

 

Row = Row + 1

 

 

 

End

I f

 

 

 

 

 

 

N ext

cb ar

 

 

 

 

 

End

Sub

 

 

 

 

 

 

 

На рис. 23.1 показана часть вычислений, являющихся результатом выполнения этой про­ цедуры. Диапазон значений индекса контекстного меню — от 21 до 148. Также обратите вни­ мание на то, что не все имена являются уникальными. Например, объекты CommandBar с индексами 36 и 38 включают Имя я че й ки (Name of Cell). Это связано с тем, что щелчок

правой кнопкой мыши на ячейке приводит к появлению различных контекстных меню, если в одном из случаев выбран режим Разметка страницы (Page Break Preview).

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

Этот пример находится на прилагаемом к книге компакт-диске в файле show s h o rtc u t menu nam es.xlsm .

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

723

Свойства элементов управления C o m m a n d B a r

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

C aption . Этот текст отображается на элементе управления. Если элемент управ­ ления отображает только изображение, значение свойства C ap tion отображается после установки указателя мыши над элементом управления.

ID. Уникальный числовой идентификатор элемента управления.

Face ID. Это число представляет изображение, отображаемое рядом с текстом, заданным для элемента управления.

Туре. Это значение определяет, является ли элемент управления кнопкой (mso- C o n tro lB u tton ) или подменю (m soControlPopup).

P ic tu r e . Изображение, отображаемое рядом с текстом, заданным для элемента управления.

BeginGroup. Значение этого свойства равно True, если перед элементом управ­ ления отображается разделитель.

OnAction. Название макроса VBA, вызываемого на выполнение после щелчка мышью на элементе управления.

Bui I t In. Значение этого свойства равно True, если относится к встроенному элементу управления Excel.

Enabled. Значение этого свойства равно True, если на элементе управления произведен щелчок мышью.

V is ib le . Значение этого свойства равно True, если элемент управления является видимым. Многие из контекстных меню содержат скрытые элементы управления.

T oolT ip T ext. Текст, отображаемый после установки указателя мыши над эле­ ментом управления. (Не применяется для контекстных меню.)

Отображение всех элементов контекстного меню

Процедура Show ShortcutM enuItem s, код которой приведен ниже, создает табли­ цу, в которой находятся все элементы управления первого уровня, которые относятся к каждому элементу контекстного меню. Для каждого элемента управления отображают­ ся значения свойств Index, Name, ID, C aption, Type, E nabled и V is ib le .

Sub Show ShortcutM enuItem s()

 

Dim Row As

Long

 

 

 

 

Dim Cbar

As CommandBar

 

 

Dim c t l

As

CommandBarControl

 

Range("A1:G1")

= A r r a y ( " In d e x "# "Name", "ID ",

"C a p tio n ",

|

"Type",

"E n a b le d ",

" V is ib le " )

 

Row

=

2

 

 

 

 

 

 

A p p lic a tio n . S creenU pdating = F a lse

**

For

Each Cbar In A p p lic a tio n . CommandBars

 

 

I f

Cbar.Type

= 2

Then

 

 

 

For

Each

c t l

In

C b a r. C o n tro ls

 

 

 

 

C ells(R o w ,

1)

= C b a r.In d e x