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

556

Часть V. Профессиональные методы программирования

(C h a rtO b j e c ts )

под названием Л ист1 . Свойство C h a rt возвращает объект C h a rt,

а свойство C h a r t T it le возвращает объект C h a r t T it le . В самом конце оператора вы обращаетесь к свойству T e x t.

Обратите внимание, что указанный выше оператор не будет работать в случае, если диаграмма не имеет заголовка. Для добавления к диаграмме заголовка, заданного по умолчанию (отображает текст З а го л о в о к диаграммы (Chart Title)), воспользуйтесь следующим оператором:

W o rksh e e ts( "Л и ст1 ") . C h a rtO b je c ts ( 1 ) . C h a rt.H a s T itle = True

Для диаграммы на листе диаграммы объектная модель несколько отличается, так как она не содержит объект W o rk s h e e t или C h a rtO b j e c t. Например, ниже представлена объектная модель для диаграммы на листе диаграммы.

A p p lic a tio n

Workbook

C ha rt

C h a r tT itle

Следующий оператор можно использовать для просмотра заголовка диаграммы “Ежегодные продажи”:

S h e e ts ( "Л ист1" ) . C h a r t T it le . T e xt = "Ежегодные продажи"

Другими словами, лист диаграммы является объектом C h a rt и не содержит объект C h a rtO b j e c t. Если рассмотреть ситуацию в общем, то легко понять, что родительским объектом для встроенной диаграммы является объект C h a rtO b j e c t, а для диаграммы на отдельном листе диаграммы родительским объектом выступает объект W orkbook.

Ниже приведены операторы, которые отображают окно сообщения со словом Д иа ­

грамма.

 

MsgBox

TypeNam e(Sheets( "Л ист1" ) . C h a rtO b je c ts ( 1 ) .C h a rt)

Msgbox

TypeNam e(Sheets( "Диаграмма1"))

 

П р и м еч а н и е

 

При создании внедренной диаграммы происходит пополнение коллекций

 

ChartOb je c ts и Shapes, находящихся на определенном рабочем листе.

 

(Коллекция C h a rts на рабочем листе не содержится.) При создании листа

 

диаграммы пополняются коллекции c h a rts и sh ee ts, относящиеся к опре­

 

деленной рабочей книге.

Создание внедренной диаграммы

Объект C h a rtO b j e c t — это специальный тип объекта Shape. По сути, он является

элементом

коллекции Shapes. Для создания диаграммы воспользуйтесь методом

A d d C h a rt

из коллекции S hapes. Следующий оператор создает пустую внедренную

диаграмму:

 

A c tiv e S h e e t. Shapes.AddChart

Метод A d d C h a rt использует пять аргументов (все они необязательны).

Туре. Этот аргумент определяет тип диаграммы. Если он не указан, используется

тип диаграммы, заданный по умолчанию. Поддерживаются константы для всех типов диаграмм (например, x lA r e a , x lC o lu m n C lu s te re d и т.д.).

558 Часть V. Профессиональные методы программирования

С о зд ан и е д иагр ам м ы традиционны м сп о со б о м

Использование метода AddChart из коллекции shapes (как описано в разделе “Создание внедренной диаграммы”) обеспечивает “новый” способ создания диаграмм, появившийся в версии Excel 2007. Исходя из соображений обратной совместимости можно использовать метод Add из коллекции ChartOb je c ts . Этот метод, в отличие от метода AddC hart из коллекции shapes, не позволяет указывать тип диаграммы в каче­ стве аргумента, поэтому в случае необходимости выбора типа диаграммы, отличающего­ ся от заданного по умолчанию, следует воспользоваться свойством ChartType. Аргумен­ ты L e ft, Top, W idth и H e ig h t также являются обязательными.

Следующая процедура использует метод Add из коллекции ChartOb je c ts для соз­ дания внедренной диаграммы.

Sub

C re a te C h a rt2 ()

 

 

Dim

MyChart As

C ha rt

 

Dim

DataRange

As

Range

 

Set

DataRange

=

A c tiv e S h e e t. Range( " A l: C7")

 

Set

MyChart =

A c tiv e S h e e t. C h a rtO b je c ts .A d d (10, 10, 354, 2 1 0 ).C ha rt

 

M yC h art. SetS ourceD ata S o u rce : =DataRange

 

M yC h art. C hartType = x lC o lu m n C lu ste re d

End

Sub

 

 

 

Размещение диаграммы на листе диаграммы

Впредыдущем разделе рассматривалась простая процедура, с помощью которой соз­ давалась внедренная диаграмма. Если же нужно разместить диаграмму на листе диа­ граммы, воспользуйтесь методом Add из коллекции C h a rts . Этот метод применяет множество аргументов, хотя все они определяют положение листа диаграммы, а не ин­ формацию, связанную с самой диаграммой.

Вследующем примере создается диаграмма на листе диаграммы, а также определяет­ ся диапазон данных и тип данных.

Sub

C re a te C h a rtS h e e t()

 

Dim

MyChart As

C ha rt

 

 

Dim

DataRange

As

Range

 

 

Set

DataRange

=

A c tiv e S h e e t. Range( " A l: C7")

 

Set

MyChart =

C h a rts .A d d

 

M yC hart. S etS ourceD ata

S o u rce : =DataRange

 

A c tiv e C h a rt. C hartType

= xlC o lu m n C lu ste re d

End

Sub

 

 

 

Результат выполнения этого кода приводится на рис. 18.2.

Активизация диаграммы с помощью кода VBA

Для активизации внедренной диаграммы достаточно щелкнуть мышью в ее области. Для активизации диаграммы с помощью кода VBA воспользуйтесь методом A c t iv a te . Ниже показан оператор VBA, выполнение которого дает тот же эффект, что и щелчок мышью в области внедренной диаграммы при нажатой клавише <Ctrl>.

A c tiv e S h e e t. C h a rtO b je c ts ( "Диаграмма1") .A c tiv a te

Если диаграмма находится на лксте диаграммы, используйте такой оператор:

S h e e ts ( "Диаграмма!" ) .A c tiv a te

диаграм м а!.

560

Часть V. Профессиональные методы программирования

Sub

M o v e C h a rtl()

 

S h e e ts ( " Л и с т 1 " ) . C h a rtO b je c ts ( 1 ) .C h a rt. _

 

L o c a tio n xlL o ca tio n A sN e w S h e e t, "МояДиаграмма"

End

Sub

Следующий пример прямо противоположен предыдущему — диаграмма, находящая­ ся на листе диаграммы МояДиаграмма, преобразуется во внедренную диаграмму на ра­ бочем листе Лист1.

Sub

M oveChart2()

 

 

C h a rts ( "М ояДиаграмма")

_

 

.L o c a tio n x lL o c a tio n A s O b je c t, "Л и ст1"

End

Sub

 

 

П р и м еч ан и е

 

 

Для активизации перемещенной диаграммы можно воспользоваться мето­

 

дом L o c a tio n .

 

Что в им ени тв оем ?

 

Все объекты ChartOb j e c t

имеют имена. Также именуется каждый объект c h a rt

в составе объекта ChartOb j e c t. На первый взгляд это просто, хотя может приводить к недоразумениям. Для примера создайте диаграмму на листе Лист1 и активизируйте ее. Затем активизируйте окно отладки VBA и введите несколько команд.

?A c tiv e S h e e t. Shapes( 1 ) .Name

Диаграмма1

?A c tiv e S h e e t. C h a rtO b je c ts ( 1 ) .Name

Диаграмма1

?A c tiv e C h a rt.Name

Лист1 Диаграмма1

?A c tiv e s h e e t. C h a rtO b je c ts ( 1 ) .Chart.Nam e

Лист1 Диаграмма1

Если изменить имя рабочего листа, изменится название объекта c h a rt, однако не­ возможно изменить название объекта c h a rt, находящегося в объекте c h a rt o bj ect. Если попытаться сделать то же самое с помощью VBA, на экране отобразится сообще­ ние об ошибке “Out of memory” .

A c tiv e s h e e t. C h a rtO b je c ts ( 1 ) . Chart.Name = "НовоеИмя"

А что можно сказать относительно изменения имени объекта ChartOb j e ct? На пер­ вый взгляд, эту операцию можно выполнить в поле Имя (Name) (в левой части панели формул). К сожалению, интуиция вас подводит. Так можно переименовать форму, но диаграмму переименовать таким образом не получится (даже если диаграмма является формой). Для переименования внедренной диаграммы воспользуйтесь элементом управления Имя диаграммы (Chart Name), который находится в группе Работа с диаграммами^Макет^Свойства (Chart Tools^Layout^Properties). Этот элемент управления отображает имя активной диаграммы (фактически это название объекта ChartOb j ect), причем этот элемент управления можно использовать для изменения названия объекта ChartOb j e c t. Как ни странно, Excel позволяет использовать имя существующего объекта ChartOb j e c t. Другими словами, на рабочем листе могут находиться десятки встроен­ ных диаграмм, причем каждая из них будет называться

Выводы? Учитывайте эту особенность. Если обнаружится, что код VBA, предназна­ ченный для обработки диаграмм, не работает, убедитесь в том, что диаграммы названы по-разному.