2006 г.
Биллиг Владимир Арнольдович Интернет-Университет Информационных Технологий, INTUIT.ru
Назад Оглавление Вперёд Свойства - участники объекта Chart
Объекты, вложенные в Chart, представлены на рис. 3.18, а на следующем рисунке показана структура объектов ChartGroup и Series.
Рис. 3.18. Структура объекта Chart
Рис. 3.19. Структура объектов ChartGroup и Series
Давайте познакомимся с объектами, вложенными в Chart :
PivotLayout - это новый объект, появившийся в Office 2000. Его появление связано с усилением внимания к обработке многомерных источников данных, а, следовательно, и к сводным таблицам и диаграммам. Объект имеет много свойств, позволяющих добраться до полей сводной таблицы, и много методов, например, метод AddFields , позволяющий добавить новое поле. С его помощью можно также работать с осями сводной диаграммы. ChartArea - представляет область, отведенную под диаграмму. Для двумерных диаграмм эта область включает заголовок диаграммы, легенду, оси и их заголовки, а для трехмерных - только заголовок диаграммы и легенду. Вложенные в ChartArea объекты: Border, Font, Interior, FillFormat позволяют задать границы области, используемый для подписей шрифт, формат заполнения, цвет, образец заполнения фона и другие характеристики. Терминальные свойства Height, Width, Left, Top задают границы области. Методы Select, Clear, Copy позволяют выделить область, очистить ее содержимое или поместить его в буфер.PlotArea - задает внутреннюю часть области диаграммы, отведенную непосредственно для графического отображения данных. Эту область окружает область объекта ChartArea . В область объекта PlotArea для двумерных диаграмм входят маркеры данных, линии сетки, линии тренда и те возможные элементы диаграммы, которые помещаются в ее область. Для трехмерных диаграмм к этой области относятся также оси и их заголовки, а также нижняя грань и боковые грани трехмерного куба, рисуемого для создания иллюзии трехмерного пространства. PlotArea имеет свойства и методы, сходные с объектом ChartArea .ChartTitle - является "полноценным" объектом. Помимо свойства Text , задающего текст заголовка диаграммы в него встроены собственные объекты: Border, Font, Interior, FillFormat . Кроме этого можно задать ориентацию заголовка, выравнивание, расположение. Есть даже собственные методы - Select и Delete .Axes(Axis) - С осями диаграммы есть смысл разобраться подробнее. Во-первых, есть некоторая путаница в классификации - что есть Axes -метод или свойство? Будем считать, что есть и метод и свойство. Метод Axes(Type, AxisGroup) возвращает одну ось - объект Axis . Параметр Type имеет три значения: xlValue, xlCategory, или xlSeriesAxis (только для трехмерных диаграмм), указывающих, какая из трех возможных осей возвращается. Второй параметр - AxisGroup указывает, какая ось возвращается - основная или вспомогательная. Этот параметр имеет два значения: xlPrimary или xlSecondary . Для трехмерных диаграмм возможно использование только основных осей. Свойство Axes (или метод, вызываемый без параметров) возвращает коллекцию осей. Метод Item этой коллекции позволяет добраться до нужной оси. Пример работы с этим объектом был приведен. Замечу, что вспомогательные оси полезны, когда на диаграмме отображаются несколько рядов данных, имеющих разные масштабы. Соответствующий пример построения такой оси уже был приведен.SeriesCollection(Series) - коллекция рядов данных. Как обычно, параметр Index или метод Item позволяют добраться до элемента коллекции - объекта класса Series , представляющего конкретный ряд данных. Коллекция имеет следующие методы: Add , позволяющий добавить новый ряд данных, Extend , добавляющий новые точки в ряды данных коллекции, NewSeries , создающий новый ряд данных и возвращающий в качестве результата объект класса Series . Конечно, непросто устроен и объект Series , задающий сам ряд данных. Его структура показана на рис. 3.19, а некоторые из основных его свойств были продемонстрированы в предыдущем примере.DataTable - объект, представляющий таблицу данных. Основными методами являются Select и Delete , основные свойства связаны с рамкой, строящейся вокруг таблицы. Вся содержательная работа с данными таблицы ведется через другие объекты (ряды данных). Так что по существу этот объект представляет рамку таблицы данных. Legend - задает легенду диаграммы. O сущности этого объекта мы уже говорили, так что его поведение должно быть понятно.Shapes - эта коллекция нам хорошо знакома. В диаграммах она используется редко, но иногда можно категории изображать рисунками, что повышает эстетику диаграммы. ChartGroups(ChartGroup) - возвращает коллекцию групп. Элементами коллекции являются объекты класса ChartGroup . Каждый такой объект представляет группу, связанную с одним или несколькими рядами данных, отображаемых диаграммой одного и того же типа, о чем я уже подробно рассказывал. Параметр Index позволяет добраться до конкретной группы в коллекции. Поскольку при форматировании одной из группы индексы изменяются, то иногда удобнее пользоваться специальными методами, которые возвращают группы фиксированного типа. Такими методами являются: AreaGroups, BarGroups, ColumnGroups, DoughnutGroups, LineGroups и PieGroups . Эти методы для двумерных диаграмм возвращают коллекцию групп типа, указанного методом. К конкретной группе можно добраться опять - таки с помощью индекса. Для трехмерных диаграмм может быть только одна группа определенного формата. Поэтому есть методы, возвращающие эту единственную группу: Area3DGroup, Bar3DGroup, Column3DGroup, Line3DGroup, Pie3DGroup, SurfaceGroup .Floor, Walls и Corners объекты используются при работе с трехмерными диаграммами. При отображении таких диаграмм для создания иллюзии трехмерного пространства диаграмма отображается на фоне открытого куба, имеющего основание, заданное объектом Floor , и две боковые грани - объекты Walls . Объект Corners задает углы куба. Манипулируя этими объектами, можно, например, развернуть куб или изменить заливку и узор стенок куба, добиваясь большей наглядности изображения.
Терминальные свойства объекта Chart
Основные терминальные свойства сведены в таблицу.
Таблица 3.8. Терминальные свойства объекта ChartСвойство | Описание |
---|
ChartType | Позволяет прочесть или задать тип и формат стандартной диаграммы. Возможные значения задаются константами, которых около сотни. Напомним, что с каждым из 14 стандартных типов связано до 10 форматов. | AutoScaling | Булево свойство, имеющее значение True , когда трехмерная диаграмма автоматически масштабируется так, чтобы совпадать по размеру с двумерной. Свойство RightAngleAxes должно также иметь значение True . | BarShape | Мы ранее говорили, что двумерные гистограммы изображаются в виде прямоугольников. Для изображения трехмерных гистограмм обычно используются параллелепипеды, но можно применять и другие геометрические фигуры. Свойство BarShape задает вид используемой фигуры. Оно имеет следующие значения: xlBox, xlConeToMax, xlConeToPoint, xlCylinder, xlPyramidToMax, или xlPyramidToPoint . Использовать это свойство вряд ли стоит. Все эти фигуры- "изыски от лукавого". | DepthPercent, HeightPercent | Свойства применимы только к трехмерным диаграммам. Позволяют установить глубину и высоту диаграммы в процентах относительно ее ширины. | DisplayBlanksAs | Устанавливает способ интерпретации данных при встрече с пустой ячейкой. Следующие константы: xlNotPlotted, xlInterpolated, или xlZero задают три возможные стратегии- игнорировать ячейку, провести интерполяцию или считать нулем. | Elevation, Rotation, Perspective, RightAngleAxes | Можно попытаться повысить наглядность изображения диаграммы. Свойство Elevation задает возвышение (в градусах) точки, с которой Вы смотрите на диаграмму. Rotation задает поворот вокруг оси Z , а Perspective - перспективу. Булево свойство RightAngleAxes задает "угол зрения". | GapDepth | Задает в трехмерной диаграмме расстояние между рядами данных. Значение может быть в интервале от 0 до 500. | HasAxis, HasDataTable, HasLegend, HasTitle | Булевы свойства, показывающие, какие элементы диаграммы присутствуют в ней. | PlotBy | Имеет два значения: xlColumns и xlRows , указывающие столбцы или строки следует использовать как ряды данных. | PlotVisibleOnly | Булево свойство, имеющее значение True, если отображаются только данные из видимых ячеек. В противном случае диаграмма отображает все данные, включая скрытые ячейки. | ProtectContents, ProtectData, ProtectDrawingObjects, ProtectFormatting, ProtectGoalSeek, ProtectionMode, ProtectSelection | Булевы свойства, позволяющие установить защиту соответствующих элементов диаграммы. Часть из них имеет статус "только для чтения". | ShowWindow | Булево свойство, применяемое только к встроенным диаграммам. Имеет значение True , если диаграмма отображается в отдельном окне. | Visible | Напомним, имеет три значения: True, False и xlVeryHidden . |
Методы объекта Chart
Мы не будем рассматривать методы, которые так или иначе уже встречались. Рассмотрим только основные методы, определяющие новое поведение объекта Chart:
Sub ChartWizard([Source], [Gallery], [Format], [PlotBy], [CategoryLabels], [SeriesLabels], [HasLegend], [Title], [CategoryTitle], [ValueTitle], [ExtraTitle]) Этот метод позволяет построить или модифицировать существующую диаграмму. В отличие от мастера диаграмм (ChartWizard), который вызывается при построении диаграммы вручную, метод не является интерактивным, более того он не позволяет задать все возможные свойства. С его помощью можно выполнить основную работу, а детали строятся с использованием других свойств и методов объекта Chart . В одном из ранее приведенных примеров (процедуре AddChart ) я демонстрировал применение этого метода для программного построения диаграммы. Дадим краткое описание параметров метода, все из которых являются необязательными: Source - объект Range , содержащий исходные данные для построения новой диаграммы. Если параметр опущен, то метод позволяет отредактировать существующую диаграмму - либо выделенную диаграмму рабочего листа, либо диаграмму активного листа диаграмм.Gallery - задает тип диаграммы и может быть одной из следующих констант: xlArea, xlBar, xlColumn, xlLine, xlPie, xlRadar, xlXYScatter, xlCombination, xl3DArea, xl3DBar, xl3DColumn, xl3DLine, xl3DPie, xl3DSurface, xlDoughnut , или xlDefaultAutoFormat .Format - задает формат для данного типа диаграммы. Каждому типу диаграммы соответствует некоторое число возможных форматов. Параметр задает номер формата, по умолчанию выбирается первый формат данного типа.PlotBy - соответствует терминальному свойству PlotBy .CategoryLabels и SeriesLabels - целые, указывающие число строк или столбцов с метками категорий и рядов данных в области, заданной параметром Source. Указывать эти числа нужно на единицу меньше фактического значения.- Остальные параметры позволяют добавить легенду, задать название диаграммы и ее осей - они совпадают с соответствующими терминальными свойствами.
Sub SetSourceData(Source As Range, [PlotBy]) Устанавливает источник данных диаграммы. Второй параметр соответствует терминальному свойству PlotBy .Sub ApplyCustomType(ChartType As XlChartType, [TypeName]) Метод позволяет модифицировать диаграмму, применив к ней новый тип - стандартный или настраиваемый. Если этот тип стандартный, то тогда первый параметр полностью его определяет. Его возможные значения совпадают со значениями соответствующего терминального свойства ChartType . Если же тип настраиваемый, то первый параметр должен иметь одно из следующих значений: xlBuiltIn, xlUserDefined или xlAnyGallery . В этом случае второй параметр задает имя типа диаграммы.Function Export(Filename As String, [FilterName], [Interactive]) As Boolean Позволяет экспортировать диаграмму, преобразуя ее в графический формат. Первый параметр задает имя файла, в который будет записана диаграмма в графическом формате, второй - задает имя графического фильтра в том виде, как оно записано в системном регистре. Булев параметр Interactive должен иметь значение True , если мы хотим вызвать диалоговое окно в процессе фильтрации. Функция Export возвращает значение True в случае успешного завершения работы.Sub GetChartElement(X As Long, Y As Long, ElementID As Long, Arg1 As Long, Arg2 As Long) . Представьте себе, что пользователь щелкнул кнопку мыши где-то над диаграммой. Обработав это событие, можно получить координаты курсора мыши - X и Y . Если теперь вызвать метод GetChartElement с этими координатами, то он вернет значение параметра ElementID - идентификатор элемента диаграммы и значения двух параметров, связанных с этим элементом. Конечно, параметры зависят от типа того элемента, чьи координаты X и Y заданы.Function Location(Where As XlChartLocation, [Name]) As Chart . Передвигает диаграмму в новое местоположение. Параметр Where имеет следующие значения: xlLocationAsNewSheet, xlLocationAsObject , или xlLocationAutomatic . В первом случае диаграмма помещается на новый лист диаграммы и параметр Name задает имя этого листа. Во втором случае диаграмма помещается как встроенный объект и Name задает имя рабочего листа. Вот пример, в котором диаграмму, построенную на рабочем листе книги "BookOne" мы переносим на отдельный лист диаграмм: Public Sub MoveChart()
Workbooks("BookOne").Worksheets("Sheet1").ChartObjects(4) _
.Chart.Location Where:=xlLocationAsNewSheet, Name:="Динамика продаж"
End Sub Sub SetSourceData(Source As Range, [PlotBy]) Позволяет установить новый источник данных. Параметры в пояснениях не нуждаются.
В заключение приведем процедуру, создающую трехмерную диаграмму по данным нашего примера с дилерами и продажами:
Public Sub Chart3D()
Workbooks("BookFour").Activate
With Worksheets("Лист3")
Dim myRange As Range
Set myRange = .Range("C23:F27")
Dim myChart As ChartObject
'Создаем контейнер объекта Chart
Set myChart = .ChartObjects.Add(myRange.Left - 100, _
myRange.Top + myRange.Height, 400, 300)
End With
'Определяем параметры объекта Chart
With myChart.Chart
.ChartType = xl3DColumn
.SetSourceData Source:=myRange, PlotBy:=xlRows
.Location Where:=xlLocationAsObject, Name:="Лист3"
End With
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Динамика продаж"
End With
'Диалог с пользователем
If MsgBox("Хотите изменить угол зрения?", vbYesNo) = vbYes Then
ActiveChart.RightAngleAxes = True
End If
End Sub
Дадим некоторые комментарии к этой программе:
- В качестве источника данных выступает известная по предыдущим примерам таблица Excel.
- Я ввел объекты
myRange и myChart класса ChartObjects . Это позволило задать нужные размеры и положение диаграммы, привязанное к таблице данных. - Ранее при построении диаграмм я использовал метод
ChartWizard и работу с коллекциями SEriesCollection . Теперь продемонстрирован еще один способ, когда задаются свойства и методы объекта Chart , в частности, для указания источника данных используется метод SetSourceData . - Свойство
ChartType позволяет указать тип диаграммы, а метод Location определяет ее, как встроенный объект. - В диалоге с пользователем изменяется угол зрения, задаваемый булевым свойством
RightAngleAxes . - Задав еще заголовок диаграммы, и приняв остальные свойства диаграммы по умолчанию, я получил диаграмму, представленную на рис.3.14.
События объекта Chart
В отличие от объекта Worksheet , все события которого могут быть обработаны на верхнем уровне, объект Chart имеет специфические события, сообщения о которых направляются только ему одному. Встроенные диаграммы и листы диаграмм, имеют одни и те же события. Разница состоит в том, что события встроенных диаграмм по умолчанию выключены, поэтому необходимо потрудиться, чтобы стало возможным их подключение и написание обработчиков событий. Рассмотрим список событий, связанных с объектом Chart :
Таблица 3.9. События объекта ChartСобытие | Появляется, когда пользователь или программа |
---|
Activate | Активизировал лист диаграмм. Естественно, его нет у встроенных диаграмм. | BeforeDoubleClick | Дважды щелкает кнопкой мыши на диаграмме | BeforeRightClick | Щелкает правой кнопкой мыши на диаграмме | Calculate | Добавил или изменил данные на диаграмме. | Deactivate | Активизировал новый лист и тем самым деактивировал старый. | DragOver | Перетащил данные, расположив их поверх диаграммы. | DragPlot | Перетащил диапазон ячеек, расположив их поверх диаграммы. | MouseDown | Нажал кнопку мыши при позиционировании ее над диаграммой. | MouseMove | Передвигает указатель мыши по диаграмме. | MouseUp | Закончил перемещение мыши и освободил кнопку. | Resize | Изменил размер диаграммы. | Select | Выделил некоторый элемент диаграммы | SeriesChange | Изменил значение точки ряда данных. |
Построение обработчиков событий
Обработчики событий для объектов Workbook, Worksheet и объектов Chart , задающих листы диаграмм, построить нетрудно. Все эти события по умолчанию включены, поэтому для построения обработчика достаточно перейти в окно проектов, выбрать модуль, обрабатывающий события этого объекта, в окне объектов этого модуля выбрать нужный объект, а затем в окне событий и процедур выбрать из списка имя события. В результате этих действий появится заготовка, содержащая заголовок обработчика события, после чего останется написать код обработчика. Более сложно строятся обработчики событий для объектов Chart , задающих встроенные диаграммы. О том как создаются обработчики событий для тех объектов, у которых события по умолчанию выключены, я подробно рассказал при рассмотрении событий объекта Application . Остается только коротко напомнить схему действий:
- Вначале нужно создать класс, в котором следует объявить объект
Chart с событиями (With Events) - Затем нужно объявить глобальный объект созданного класса - объект, уже имеющий события. После этого остается написать инициализирующую процедуру, в которой связывается глобальный объект с объектом, задающим встроенную диаграмму.
- Поскольку объект
Chart с событиями появляется в окне созданного класса, то к нему применяется обычная схема создания обработчиков событий. - После запуска инициализирующей процедуры, объект, задающий встроенную диаграмму, будет реагировать на события.
Возможно, следует обратиться к началу главы, где все подробно описано на примере работы с объектом Application .
Назад Оглавление Вперёд
|
|