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

Глава 18. Управление диаграммами

581

Поддержка событий для встроенных диаграмм

Как отмечалось в предыдущем разделе, события объекта C h art автоматически реа­ лизованы для листов диаграмм, но отключены для диаграмм, встроенных в рабочий лист. Для того чтобы использовать события, связанные со встроенной диаграммой, необходи­ мо выполнить следующие действия.

Создайте м одуль класса

В VBE выберите проект в окне Project (Проект) и выполните команду Inserts Class Module (Вставить1^Модуль класса). Это приведет к добавлению пустого модуля класса в проект. Если возникнет желание, можно назначить модулю класса более описательное имя (например, c ls C h a rt) в окне Properties (Свойства). Переименовывать модуль класса не обязательно, хотя часто полезно.

Объявите глобальны й объект C h a rt

Следующим шагом является создание глобальной переменной, которая используется в качестве имени класса. Переменная должна иметь тип C h art и объявляться в модуле класса с ключевым словом W ithE vents. Если опустить ключевое слово W ithE vents, то объект не будет реагировать на события. Ниже приведен пример соответствующего объявления.

P u b lic W ith E v e n ts c ls C h a r t As C h a rt

Свяжите объявленны й объект с д и агр ам м о й

Перед тем как будут запущены процедуры обработки событий, необходимо связать объявленный объект в модуле класса со встроенной диаграммой. Для этого следует объя­ вить объект типа c ls C h a r t (в данном случае используется имя модуля класса). Это должна быть переменная уровня модуля, которая объявлена в обычном модуле VBA (а не в модуле класса). Ниже приводится пример.

Dim M yC hart As New c ls C h a r t

Введите код, который фактически создаст экземпляр объекта c ls C h a rt. Восполь­ зуйтесь представленным ниже оператором.

Set M y C h a rt. c ls C h a r t = A c tiv e s h e e t . C h a rtO b je c ts ( 1 ) . C h a rt

После выполнения предыдущего оператора объект c ls C h a rt в модуле класса будет указывать на первую встроенную диаграмму активного листа. Следовательно, процедуры обработки событий в модуле класса будут выполняться при возникновении соответст­ вующих событий.

Создайте процедуры обработки собы тий для класса диаграм м ы

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

P u b lic W ith E v e n ts c ls C h a r t As C h a rt

После объявления с помощью ключевого слова W ithE vents новый объект появится в раскрывающемся списке Object (Объект) в модуле класса. Если вы выберете довый объект в поле Object, его действительные события будут перечислены в раскрывающем­ ся списке Procedure (Процедура) в правой части окна.

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

Глава 18. Управление диаграммами

583

Кроме того, на каждом из других рабочих листов находится кнопка, которая вызыва­ ет макрос R eturntoM ain, повторно активизирующий лист Главный лист.

Ниже приводится полный листинг модуля M odulel.

Dim Sum m aryChart As New E m bC hartC lass Sub C h e c k B o x l_ C lic k ()

I f W o rk s h e e ts ( "Главный л и с т " ) . C heckB oxes( "Флажок 1 ") = xlO n Then ■ Вызов событий диаграммы

R ange( " A l " ) . S e le c t

S et S um m a ryC h a rt.m yC h a rtC la ss = _

W o rk s h e e ts ( 1 ) . C h a rtO b je c ts ( 1 ) .C h a rt

Else

'Отключение событий диаграммы

 

S et S u m m a ryC h a rt.m yC h a rtC la ss = N o th in g

 

R ange( " A l " ) . S e le c t

 

End I f

End Sub

Sub

R e tu rn T o M a in ()

1

Вызывается с помощью кн о п ки на рабочем листе

 

S h e e ts ( "Главный л и с т " ) . A c t iv a t e

End Sub

Первая инструкция объявляет новую объектную переменную SummaryChart, кото­ рая имеет тип E m bC hartC lass (как вы помните, это название модуля класса). Как только пользователь устанавливает флажок События диаграммы (Enable Chart Events), внедренная диаграмма присваивается объекту SummaryChart, который активизирует события для диаграммы. Ниже приводится содержимое модуля класса для модуля класса EmbChartClass.

P ublic

W ith E v e n ts

m yC h a rtC la ss As

C h a rt

 

 

 

P riv a te Sub

m yC hartC lass_ M ouseD ow n(B yV al

B u tto n

As

Long, _

 

ByVal

S h if t

As

Long, B yV al X

As

Long,

B yV al

Y As

Long)

 

Dim

IDnum

As

Long

 

 

 

 

 

 

 

 

Dim

a

As

Long,

b As

Long

 

 

 

 

 

 

'

Следующий

 

оператор

возвращ ает

значения

для

 

 

IDnum,

а

и

b

 

 

 

 

 

 

 

 

 

 

m y C h a rtC la s s . G e tC h a rtE le m e n t

X,

Y,

IDnum, a,

b

 

1

На

каком

ряду

был выполнен щелчок

мышью?

 

 

 

I f

IDnum

=

x lS e r ie s

Then

 

 

 

 

 

 

 

 

S e le c t

 

Case

b

 

 

 

 

 

 

 

 

 

 

Case

1

 

 

 

 

 

 

 

 

 

 

 

 

S h e e ts ( "С е в е р ") . A c t iv a t e

 

 

 

 

 

 

 

Case

2

 

 

 

 

 

 

 

 

 

 

 

 

 

S h e e ts ( " Ю г " ) . A c t iv a t e

 

 

 

 

 

 

 

 

Case

3

 

 

 

 

 

 

 

 

 

 

 

 

S h e e ts ( "З а п а д ") . A c t iv a t e

 

 

 

 

 

 

End S e le c t

 

 

 

 

 

 

 

 

 

End

I f

 

 

 

 

 

 

 

 

 

 

 

 

 

R ange( " A l " ) . S e le c t

 

 

 

 

 

 

 

End Sub

После щелчка на диаграмме вызывается событие MouseDown, которое, в свою оче­ редь, вызывает процедуру myChartClass_MouseDown. Эта процедура использует метод GetChartElem ent для определения элемента диаграммы, на котором произведен щел­ чок мышью. Метод G etC hartE lem ent возвращает информацию об элементе диаграммы