Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Diagrammy_v_Excel_Dzhon_Uokenbakh_2003

.pdf
Скачиваний:
31
Добавлен:
26.03.2016
Размер:
33.34 Mб
Скачать

Начиная с версии Excel 2002, средства защиты листов стали более разнооб­ разными. При защите листа Excel предоставляет список операций, которые могут быть выполнены над содержимым листа. Среди этих операций — редак­ тирование объектов. Если редактирование объектов разрешено, то диаграмму можно редактировать, даже когда лист защищен.

Безопасны ли защищенные листы?

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

Свойства защиты диаграмм

Кроме упомянутых выше, в Excel представлены другие типы защиты, о которых знают немногие. В частности, объект Chart имеет ряд свойств, связанных с защитой (все они по умолчанию содержат значение False).

ProtectData. Если это свойство равно True, то формула РЯД не может быть изменена.

ProtectFormatting. Если это свойство равно True, то форматирование диа­ граммы запрещено.

ProtectSelection . Если это свойство равно True, то элементы диаграммы не могут быть выделены.

ProtectGoalSeek. Если это свойство равно True, то пользователь не может изменить данные диаграммы путем перетаскивания точек данных.

Важно понимать, что все эти свойства не сохраняются с рабочей книгой. На­ пример, если выполнить макрос, устанавливающий свойство диаграммы ProtectData в True, то после закрытия и повторного открытия рабочей кни­ ги свойство ProtectData опять будет иметь значение False. Чтобы вновь ус­ тановить значение свойства в True, нужно выполнить макрос повторно.

Защита всех диаграмм открытой рабочей книги

Excel предоставляет способ автоматического выполнения макроса при каждом откры­ тии рабочей книги. Способ основан на использовании процедуры Workbook_Open, код ко­ торой должен быть расположен в модуле кодов объекта ThisWorkbook.

Ниже приведена одна из возможных реализаций процедуры Workbook_Open, вы­ полняющейся при каждом открытии рабочей книги. В процедуре используется цикл, перечисляющий рабочие листы и все диаграммы каждого рабочего листа. Свойству ProtectFormatting каждой диаграммы присваивается значение True. В результате после выполнения процедуры Workbook_Open ни одна внедренная диаграмма не мо­ жет форматироваться.

Private Sub Workbook_Open()

Dim Wks As Worksheet

Dim ChtObj As ChartObject

For Each Wks In ThisWorkbook.Worksheets

For Each ChtObj In Wks.ChartObjects

ChtObj.Chart.ProtectFormatting

= True

Next ChtObj

 

Next Wks

 

End Sub

 

420

Часть III. Использование VBA

Непосредственное изменение свойств защиты листа диаграмм

Приведенный в предыдущем разделе макрос предназначен для внедренных диа­ грамм. При работе с листом диаграмм все четыре перечисленных выше свойства заШ1ИТЫ можно изменять непосредственно в окне свойств диаграммы. Для этого выпол­ ните ряд действий.

1. Активизируйте лист диаграмм.

ввшиш

 

2. Щелкните правой кнопкой мыши на любой пане­

ZhartZ Chart

 

1

 

ли инструментов

и задайте вывод панели

AMi«beac|<:«twrfe«d|

Элементы управления.

DisplayBlanksAs

1 - xiNotrtotted

Elevatran

15

3. На панели Элементы управления щелкните на

GapDepth

150

HasDataTable

False

кнопке Свойства.

Активизируется диалоговое

HasLegend

True

окно Properties (Свойства).

HasPivotFidds

False

HasTitle

False

4. Изменяйте значения свойств (рис. 16.14).

Name

Диаграмма 1

 

 

HeightPercent

100

 

 

Perspective

30

 

 

PlotBy

2 - xlColumns

 

 

PlotVisibleOnly

True

 

 

ProtectData

False

 

 

 

(False

 

 

ProtectGoalSeek

False

 

 

ProtectSelection

False

 

 

RightAngleAxes

False

 

 

Rotation

20

Рис. 16.14. С помощью диалогового окна Properties можноSi2eWithWindow

False

устанавливать свойства защиты листа диаграмм

Visible

-1-xlSheetVisible

 

 

^^^^шш\

Щ

d |

zi

—^11

zjJI

Прокручиваемая диаграмма

На рис. 16.15 показана биржевая диаграмма, в которой для определения рядов данных используются именованные формулы. Ячейка II (НачСтрока) определяет на­ чальную строку данных, а ячейка 12 (колДней) — количество дней, выводимых диа­ граммой. Изменение значения любой из этих ячеек приводит к изменению диапазо­ нов рядов данных. Данные охватывают 747 дней, или три года.

Использование именованных формул в рядах данных подробно рассматрива­ ется в главе 6, " Автофигуры и графика".

Рабочая книга P i c i 6 _ i 5 . x l s содержит простой макрос, увеличивающий в цикле значение ячейки НачСтрока. В результате работы макроса диаграмма анимируется — выводимые диаграммой данные прокручиваются справа налево. Ниже приведен код макроса Прокручивать Диаграмму, запускаемого кнопкой Пуск/Стоп.

Public AnimationlnProgress As Boolean Sub ПрокручиватьДиаграмму()

Dim StartVal As Long, r As Long

If AnimationlnProgress Then

AnimationlnProgress = False

End End If

AnimationlnProgress = True StartVal = Range("НачСтрока")

For r = StartVal To 74 8 - Range("КолДней")

Range("НачСтрока") = Range("НачСтрока") + 1

DoEvents

Глава 16. Использование VBA в диаграммах

421

Next г

 

 

 

 

 

 

 

 

 

 

 

 

 

AnimationlnProgress

False

 

 

 

 

 

 

 

End Sub

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1С|Рк16_15.»<и

 

 

с

 

 

•^^^^-Ж^шш-шштш

^^^^^^^^^^Ш¥Ш'жШЩ

— ! !

 

'•'^'^ЛщУ4,^4

 

В

000

D

•£

t

^ •

Н

1

Л i K i

t

! м 1 й | 0

\шй-С401.109в

 

34 740

60,81

72.63

69.60

70.50

Кол. Дн4и

30

334

 

 

 

 

^''^ ,

,i

Объем

Открытия Высший Низший Закрытия

1-я строка

214

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

J

 

C5

01.1990

 

32 110 800

70,04

74,00

70.72

73,25

 

 

 

 

 

 

1L l l ,^

 

 

 

 

 

 

 

 

 

 

 

4

C6

01.1099

 

34 509

600

74,75

75.75

73.38

75.63

 

Пус«^Ст»п

1

 

 

 

III

6

C8

01.1990

 

25 093

600

76,00

76.38

73.50

74.94

 

 

 

 

C7

01.1099

 

25 553

800

74,88

75.31

74.13

75.25

 

 

 

 

 

 

 

1Г 7 ^11.01.1999

 

23 158 000

7 5 , 4 4

75,47

72.97

73,75

 

 

 

 

 

 

 

8

12

01.1000

 

28 820

000

74,06

74.06

70.50

71.091

 

 

 

1У11сго5ст. 19зэ -ZUUI

j;f л

 

13

01.1099

 

37 647

800

68,00

73.88

68,00

71.91

 

 

 

10^1401 . 1099

 

20 550

000

72,63

72,78

70.75

70,88

 

 

 

 

 

 

 

 

( l 2

19 01

.1099

50 5 ^

000

75,69

77.88

75,44

77.81

I

180 -

 

[is

20 01.1999

62 565

400

83,47

83.88

81 . 24

81.25

*

160 -

 

114 21.01.1000

39 988

200

80,88

81.66

78,88

79.16

111*

22

01

.1900

41 017 000

77.81

80,12

77,63

78.13

 

 

 

l i e

25

01

.1999

51 032 600

80,84

81.66

79,06

80.94

 

140 -

1^7

26

01

.1009

60 055

200

82,75

85.88

82.25

85.78

 

 

:p8

27

01

.1000

48 010

600

86,25

87.22

84.25

84.38

 

120 -

'

19

28

01

.1999

39 362

600

85,88

87.03

84.01

87,00

 

 

ao 29

01

.1999

38 071

200

87,38

87.56

85,44

87.50

 

100 -

ijat

01

02

.1999

40 553

400

87,72

87.97

85,41

86.47

 

80 -

 

1 2 2

02

02

.1009

45 800

200

86,25

86.28

83,13

83.81

 

 

{23

03

02.16Ю0

36 299 600

83.19

84.94

83,00

83.41

 

 

i

2 4

04

02

.1000

44 616

000

84.06

84.19

79.44

79.53

 

60 -

 

{ 2 6

05

02

.1999

83 972

600

80,13

80.81

77.44

80.00

 

 

i

2 0

08

02

.1999

54 022

000

81.28

82.78

80.81

82.63

 

40 -

 

1 2 7

00

02

.1990

38 526

000

82.47

83.38

70,88

80.03

 

 

 

1 2 8

10

02

.1909

36 670

800

79,04

82.10

79.31

80.31

 

20 -

 

l i d

11

02

.1999

20 634 200

81,38

81.94

80,19

81.38

 

 

 

|зо

12 02

.1900

31 377 800

80.84

81.84

78,56

78.88

 

 

 

131 ^ 16

02

.1900

38 781

600

79.88

80.00

77,28

78,13

 

 

 

|Э2

1702 . 1999

50 132 800

76.47

77.25

74.25

75.00

 

 

 

|1^^И i

• «|улиC T I / ' - "

600

75^47

75,69

71J09

72,88

 

 

 

 

18 02

.1999

58 297

 

 

:о;-';-::^.л^=::^г''1"';::':1

•А

: |

..^^\

.„

}

•^\

.^1.Ш1

Рис. 16.15. Диапазоны выводимых диаграммой данных определяются значениями ячеек II и

В макросе используется переменная AnimationlnProgress с областью видимости Public, значение которой определяет, анимирована ли диаграмма в момент щелчка на кнопке. Если да, то макрос присваивает переменной AnimationlnProgress зна­ чение False и процедура завершается. Это позволяет запускать и останавливать про­ кручивание с помощью одной кнопки.

Примеры обработки событий

Макрос может запускаться при наступлении некоторого события. Например, собы­ тием является открытие рабочей книги, следовательно, можно создать макрос (в этом случае он называется процедурой обработки события), выполняющийся при открытии рабочей книги. Ранее в главе уже рассматривался один из примеров процедуры обра­ ботки события -- макрос Workbook_Open.

Процедуры обработки события Worksheet_Change

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

Макросы обработки событий должны быть расположены в модуле кодов ра­ бочего листа (например, в модуле Лист1). Если расположить их в стандарт­ ном модуле VBA, то они не будут запускаться.

422

Часть III. Использование VBA

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

OIWliHUff

"3.

 

SdectionChange

 

^Activate

Private Sub Worksheet__Selection"

 

^BeforeDoubleCIck

End Sub

beforeRjghtClick

Calculate

Deactivate

FoliowHyperink

PivotTableUpdate

IselectionChange

№<t J

"'Ш

Рис. 16.16. Раскрывающиеся списки в модуле кодов, предназна­ ченные для выбора события

Сокрытие и вывод диаграмм

Рабочий лист, показанный на рис. 16.17, содержит пять диаграмм, три из которых скрыты. Значение ячейки В2 определяет, какая из них в данный момент видима. В ячейке В2 используется раскрывающийся список, созданный с помощью диалогового окна Проверка вводимых значений. В списке приведены пять значений от 1 до 5 и до­ полнительный пункт попе.

\w\ ^ Выбор номера диаграммы

И Ч • иглист!/^

"Ш', •:,•••• у ' i

is6.

 

Рис. 16.17. Ячейка В2 содержит раскрывающийся список номе­ ров диаграмм; номер видимой диаграммы выбран в списке

Глава 16. Использование VBA в диаграммах

423

в рабочем листе используется процедура обработки события Worksheet_Change, код которой приведен ниже. Обратите внимание: в процедуру передается аргумент Target. С его помощью процедуре передается переменная, представляющая изменяе­ мую ячейку или диапазон. Если адрес Target равен $В$2, то макрос выполняет две операции: скрывает все члены коллекции Chartobjects, а затем выводит диаграмму, соответствующую значению ячейки $В$2. Оператор On Error игнорирует ошибки, возникающие при неправильном задании номера объекта Chartobject.

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then

ActiveSheet.Chartobjects.Visible = False On Error Resume Next Chartobjects(Target.Value).Visible = True

End If End Sub

Пять внедренных диаграмм расположены одна поверх другой, поэтому на экране они выводятся в одинаковом положении.

Настройка шкалы оси

Ранее в этой главе рассматривался пример макроса, изменяющего параметры оси диаграммы (см. рис. 16.6). В этом примере макрос, запускаемый с помощью кнопки, изменяет три свойства шкалы оси: MinimumScale, MaximumScale и MajorUnit.

Теперь рассмотрим макрос обработки события, автоматизирующий этот процесс: при изменении значений ячеек он запускается самостоятельно, без щелчка на кнопке. Рабочий лист показан на рис. 16.18. Значения свойств Axis хранятся в именованных ячейках столбца D, им присвоены имена AxisMin, AxisMax и MajorUnit. Ниже при­ веден код макроса обработки события.

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then

With ActiveSheet.Chartobjects(1).Chart.Axes(xlValue)

.MinimumScale = Range("AxisMin")

.MaximumScale = Range("AxisMax")

.MajorUnit = Range("MajorUnit") End With

End If End Sub

Процедура Worksheet_change запускается при каждом изменении любой ячейки листа. Первый оператор проверяет свойство Column переменной Target (нас интересует только четвертый столбец). Если изменилась ячейка столбца 4, то значения ячеек читаются из листа и применяются в диаграмме. В ином случае ничего не происходит.

В файле Р1с1б_настройка осей точечной диаграммы.xls приведен пример макроса, который автоматически настраивает шкалы осей точечной диаграммы в за­ висимости от значений исходных данных.

События диаграммы

в предыдущих примерах использовались события, связанные с рабочим листом. Листы диаграмм также могут генерировать события (табл. 16.1).

4 2 4

Часть III. Использование VBA

1П|Р|с16_18.к1$

 

 

 

 

 

''

С

-^v'^^^v^^^^

 

 

 

 

 

к

 

«£Ш|

 

 

С

^ в ^ И

i

I F

1 vi

 

1

J

i

 

• • А .. В

 

!

G

1

Й'

 

 

t Til

1

Данные

Параметры шкалы!

100 -

 

 

 

 

 

 

 

 

 

 

 

 

 

II а,

58

AxisMin

1

-100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

из

63

AxisMax

j

lOOO

-20 -

АлД^

 

-12

MajorUnit

1

20|

 

60

80 -

 

 

 

 

 

 

 

 

 

 

 

 

 

Н

74

 

 

 

60 •

 

 

 

 

 

 

 

 

 

 

 

 

 

78

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h7

76

 

 

 

40 -

 

 

 

 

 

 

 

 

 

 

 

 

 

И)

38

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И

48

 

 

 

20 -

 

 

 

 

 

 

 

 

 

 

 

 

 

10

12

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

2

 

 

 

0 -

 

 

 

 

 

 

 

 

 

 

 

 

 

ге"

-5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И 4

25

 

 

 

-40 -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И 5

45

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16

22

 

 

 

-60 -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И 7

29

 

 

 

-80 -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

И 8

77

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Щ.

78

 

 

 

-100 -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пи"

8

 

 

 

 

1

3

5

7

9

11

13

15

17

19

21

23

25

21

27

 

 

 

 

122

24

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

66

 

 

 

 

 

 

 

 

Jjli

 

 

.

 

 

 

1

•tlJ^I

|м 4

• ИКЛис r l /

 

 

 

 

 

 

 

 

 

 

 

 

 

Pwc. 75.7^. Макрос обработки событий, запускаемый при изменении ячеек листа, из­ меняет свойства оси диаграммы

Таблица 16.1. События, распознаваемые объектом диаграммы

Событие

Действие, повлекшее событие

A c t i v a t e BeforeDoubleClick

Активизация диаграммы

На элементе диаграммы выполнен двойной щелчок. Событие ге­ нерируется перед стандартной реакцией на двойной щелчок (т.е. перед выводом диалогового окна форматирования)

BeforeRightClick

На элементе диа1граммы выполнен щелчок правой кнопкой мыши.

 

Событие генерируется перед стандартной реакцией (т.е. перед

 

выводом контекстного

меню)

C a l c u l a t e

Диаграмма принимает новые или измененные данные

Deactivate

Отмена активизации диаграммы

DragOver

Диапазон или ячейка перетаскиваются над диаграммой

DragPlot

Диапазон или ячейка перетаскиваются и опускаются на диаграмму

MouseDown

Нажатие кнопки мыши (указатель мыши в это время находится на

 

диаграмме)

 

MouseMove

Положение указателя мыши на диаграмме изменяется

MouseUp

Отпускание кнопки мыши (указатель мыши в это время находится

 

на диаграмме)

 

Resize

Изменение размеров диаграммы. В листах диаграмм это событие

 

генерируется, только

если установлен флажок Масштабировать

 

диаграмму по размеру

окна

Select

Выделение элемента диаграммы

SeriesChange

Значение точки данных диаграммы изменяется путем перетаски­

 

вания точки

 

Глава 16. Использование VBA в диаграммах

425

Процедуры обработки событий диаграммы должны располагаться в модуле кодов листа диаграмм (например, в модуле Диаграмма!).

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

События листов диаграмм (но не внедренных диаграмм) подключены всегда. Чтобы исполь>зовать процедуры обработки событий с внедренными диаграммами, выполните ряд действий.

1.Создайте модуль класса. В редакторе Visual Basic выделите проект в окне проек­ тов и выберите команду /nsert'=^C/ass Module (Вставка^^^Модуль класса). При этом в проект добавляется новый (пустой) модуль класса.

2.Объявите глобальный объект chart. Переменная типа Chart должна быть объяв­ лена в модуле классов с помощью ключевого слова WithEvents, например:

Public WithEvents EmbChart As Chart

3.Свяжите объявленный объект с диафаммой. Для этого объявите объект типа ciassi (допустим, так называется модуль класса). Объектная переменная должна быть объяв­ лена на уровне модуля в обычном модуле VBA (не в модуле класса), например:

Dim MyChart As New C l a s s i

4. Создайте экземпляр объекта. Для этого выполните, например, такой оператор:

Set MyChart.EmbChart = A c t i v e S h e e t . C h a r t O b j e c t s ( 1 ) . C h a r t

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

5.Создайте процедуры для классов диаграмм. Они располагаются в модуле класса. Ниже приведен пример простой процедуры.

P r i v a t e Sub EmbChart_Activate{)

MsgBox EmbChart.Parent.Name & " активизирована."

End Sub

6.Выполните оператор, уничтожающий объект и отменяющий прослушивание со­ бытия. Такой оператор имеет следующий вид:

Set MyChart.EmbChart = Nothing

Примеры использования событий диаграмм приведены в рабочих книгах Pici6_co6biTHH

листа диаграмм . xls и Р1с1б_события внедренных диаграмм . xls .

Нажатие кнопки мыши

Событие MouseDown происходит в момент щелчка на элементе диаграммы. В Excel определено также событие MouseUp — отпускание кнопки мыши. Следовательно, один щелчок кнопкой мыши генерирует два события. В примере этого раздела ис­ пользуется событие MouseDown.

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

Ниже приведен код процедуры обработки события Chart_MouseDown. Процедура выполняется при каждом щелчке кнопкой мыши на диаграмме.

Private Sub Chart_MouseDown(ByVal Button As Long, __ ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)

Dim ElementlD As Long

4 2 6

Часть III. Использование VBA

Dim argl As Long, arg2 As Long

GetChartElement X, Y, ElementlD, argl, arg2

If ElementlD = xlSeries Then

Select Case arg2

Case 1

Sheets("Север").Activate

Case 2

Sheets("Юг").Activate

Case 3

Sheets("Запад").Activate

End Select

End If

End Sub

yiJfltrlLWM

1Ш!'йОд1^

 

Для детализации по регионам щелкните на столбике

 

$2 500 т''

 

1

$2 00о|'

 

ч

fg^^fefe

 

о

 

^

$1 500f

 

,t $1000-f'

 

О

 

 

 

$500 4

 

 

$0

Запад

 

Север

Н 4 k

»П\Диаграмма1 /TfiaewatftflncT /Сее^

j(Kit_JЗатд'7'

Рис, 16.19. Отслеживание события MouseDown позволяет создать диа­ грамму, работающую как меню

Обратите внимание: процедура принимает несколько аргументов, с помощью ко­ торых можно выяснить, на чем был выполнен щелчок. Нас интересуют аргументы х и у — координаты указателя мыши в момент щелчка. Оператор GetChartElement пре­ образует координаты X и у в значения переменных ElementlD, argl и arg2.

ElementlD — это условный номер элемента диаграммы с координатами х и у. Например, значение 3 соответствует ряду. Код VBA распознает также встроен­ ную константу XlSeries, имеющую значение 3.

argl содержит дополнительную информацию об элементе с координатами х и у. Если номер ElementlD означает ряд, то переменная argl содержит число, соответствующее номеру ряда.

arg2 также содержит дополнительную информацию об элементе с координата­ ми х и у. Если этот элемент — ряд, то переменная arg2 содержит номер точки данных ряда.

При некоторых значениях переменной ElementlD аргументы a r g l и arg2 не используются. Например, если щелчок выполнен на области построения, то значение ElementlD равно 2 (xlChartArea), а значения a r g l и arg2, естест­

венно, бессмысленны.

Глава 16. Использование VBA в диаграммах

427

Диафамма, показанная на рис. 16.19, выводит только один ряд, поэтому в процедуре используется только аргумент arg2, принимающий значения 1, 2 или 3. Оператор Select Case активизирует один из листов в зависимости от значения переменной arg2.

Аналогичный пример для внедренной диаграммы находится в рабочем листе

Р1с1б_нажатие мыши, внедренная диаграмма.xls.

Прохождение мыши

Иногда возникает необходимость изменить подсказку диаграммы — небольшое со­ общение, выводимое рядом с указателем мыши во время его прохождения над эле­ ментами диаграммы. В подсказке диаграммы выводится имя элемента и (для рядов) значение точки данных. Объектная модель диаграмм не содержит подсказок, поэтому изменить их с помощью кода VBA невозможно.

Чтобы подключить или отключить вывод подсказок, выберите команду Сервис'=> Параметры, активизируйте вкладку Диаграмма и установите или снимите лю­ бой из двух флажков группы Всплывающие подсказки отображают.

В этом разделе рассматривается альтернативный способ предоставления подсказки. На рис. 16.20 показана гистограмма, в которой используется событие Mouseover. Когда указатель мыши находится на столбике гистограммы, в левом верхнем углу по­ является текстовая область (объект рисунка) с информацией о точке данных. Текст подсказки хранится в заданном диапазоне и может отображать любую дополнитель­ ную информацию о текущей точке данных.

О|Р«с16_20>

W^:'f''^^:' >101х|

 

"^

Финансовый ре«ультат sa 1-й квартал

6 000 000

4 000 000 4

I 000 000

 

 

Январь

Февраль

Март

 

а Регион 1 • Регион 2

 

Н 4 » иКДиаграмма1/Пист1 /

l U

J ±f

Рис. 16.20. В текстовой области выводится информация о точке данных, над ко­ торой проходит указатель мыши

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

листа диаграмм.

Button As Long, _

Private Sub Chart_MouseMove(ByVal

ByVal Shift As Long, _

428

Часть III. Использование VBA

ByVal X As Long, ByVal Y As Long) Dim ElementId As Long

Dim argl As Long, arg2 As Long Dim NewText As String

On Error Resume Next

ActiveChart.GetChartElement X, Y, Elementld, argl, arg2 If Elementld = xlSeries Then

NewText = Sheets("Лист1")-Range("Comments")• _ Offset(arg2, argl)

Else

NewText = "" ActiveChart.Shapes(1).Visible = False

End If

If NewText <> ActiveChart.Shapes(1). _ TextFrame.Characters.Text Then

ActiveChart.Shapes(1).TextFrame.Characters.Text = _ NewText

ActiveChart.Shapes(1).Visible = True End If

End Sub

Процедура отслеживает все движения мыши по листу диафамм. Координаты мыши передаются процедуре в переменных х и у. аргументы Button и Shift не используются.

Как и в предыдущем примере, ключевой элемент процедуры — метод GetChartElement. Если переменная ElementlD равна x l S e r i e s , значит, указатель мыши находится над рядом. Тогда переменой NewText присваивается текст опреде­ ленной ячейки. Ячейка содержит описание текущей точки данных (рис. 16.21). Если указатель мыши находится не над рядом, то текстовая область скрывается. В ином случае в ней выводится содержимое переменной NewText.

c|Picl6_20.Kls

 

--ШГхП

 

Регион 1

Регион 2

Январь

3 245 151

1 434 343

Февраль

5 546 523

1 238 709

Март

5 083 204

3 224 855

Кояментарин

Регион 2. Январь =

 

Регион 1. Январь =

 

$3245151.000

$1434343.000

 

Регион 1. Февраль =

Регион 2. Февраль =

 

$5546523.000

$1238709.000

 

Две недели стимулирования

 

 

сбыта.

 

 

Регион 1, Март =

Регион 2. Март =

 

$5083204,000

$3224855.000

 

 

Слияние с LA Corporation.

Н 4 ТЩ^Ш!Ш!^2К1^!ь7Л./ '" liL .1|Й

Рис. 16.21, Диапазон B7:D9 содержит информацию о точ­ ках данных, выводимую в текстовой области, когда указа­ тель мыши находится над рядом

Аналогичный пример для внедренной диаграммы приведен в рабочей книге

Picl6_пpoxoждeниe мыши, внедренная диаграмма.xls.

Глава 16. Использование VBA в диаграммах

429

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]