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

2 Курс Информатика VBA(ЗО) / Книги / В.Д.Хорев - Самоучитель программирования на VBA в Microsoft Office

.pdf
Скачиваний:
2814
Добавлен:
31.05.2015
Размер:
21.66 Mб
Скачать

Представление данных в MS Office 213

заливки используют свойства объекта Interior: свойство ColorIndex задает цвет (желтому соответствует индекс 6), а свойство Pattern — узор заливки. Сплошная заливка задается константой xlSolid. Наконец, для обращению к параметрам шрифта используются свойства объекта Font: изменяя логическое значение свойства Bold можно устанавливать (сбрасывать) признак “полужирный”. Свойство ColorIndex задает цвет символов (черному соответствует индекс 1). Итак, в результате получим следующий фрагмент кода:

With ActiveSheet.Range("B2:H4").FormatConditions. _

Add(xlCellValue, xlGreaterEqual, 1000)

With .Interior

.ColorIndex = 6

.Pattern = xlSolid

End With

With .Font

.Bold = True

.ColorIndex = 1 End With

End With

Добавление третьего условного формата Остается задать третий условный формат, соответствующий значениям между 500 и 1000. Для

метода Add в этом случае потребуется дополнительный параметр, а в качестве константыоператора следует использовать xlBetween (между).

Какое форматирование должно применяться к ячейке в этом случае? Например, пусть шрифт примет начертание полужирный курсив и окрасится в синий цвет:

With ActiveSheet.Range("B2:H4").FormatConditions _

.Add(xlCellValue, xlBetween, 500, 1000)

With .Font

.Italic = True

.Bold = True

.ColorIndex = 5 End With

End With

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

Рис. 8.20. К ячейкам таблицы применено условное форматирование трех видов

см. также в гл. 1 раздел “Условное форматирование ячеек”.

214 Глава 8. VBA-программирование: примеры и иллюстрации

Изменение границ таблицы

Чтобы выделить таблицу в целом, отформатируем границы всего диапазона таблицы (диапазон A1:H4 включает в себя также заголовки строк и столбцов). Снабдим этот диапазон границами из “толстых двойных линий”:

ActiveSheet.Range("A1:H4").Borders.LineStyle = xlDouble ActiveSheet.Range("A1:H4").Borders.Weight = xlThick

В результате таблица примет вид, как на рис. 8.21.

Рис. 8.21. Таблица с условными форматами снабжена границами

Диаграммы

Табличное представление данных, все же, не самый наглядный способ отобразить множество числовых значений. Гораздо лучше это получается у графических объектов — диаграмм различного вида.

Диаграммы MS Excel — не единственная доступная в среде Office разновидность диаграмм, но, наверное, наиболее часто используемая. В рабочей книге Excel могут существовать листы диаграммы, но на обычный рабочий лист Excel также можно поместить внедренную диаграмму.

Объект ChartObject: вставка диаграммы на лист Excel

Внедренная диаграмма, с точки зрения VBA, представлена объектом типа Chart, причем содержится она в своеобразном контейнере, роль которого играет объект типа ChartObject.

Итак, добавим на рабочий лист с таблицей, подготовленной в предыдущем разделе, диаграмму, которая графически отображала бы содержащиеся в таблице данные.

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

Dim MyChartObject As ChartObject

Dim MyChart As Chart

Чтобы создать на листе контейнер для диаграммы в заданной позиции и с заданными размерами, необходимо, при обращении к методу Add семейства ChartObjects рабочего листа, указать координаты верхнего левого угла диаграммы и ее размеры. Пусть диаграмма располагается чуть ниже таблицы и пусть она будет немного шире и в несколько раз выше таблицы:

Set MyChartObject = ActiveSheet.ChartObjects.Add(5, 90, 430, 210)

Представление данных в MS Office 215

Рис. 8.22. Под исходной таблицей с данными, на том же рабочем листе, создана область диаграммы, которая будет отображать содержащиеся в таблице данные в виде графика (диаграммы)

Выполнив затем присваивание,…

Set MyChart = MyChartObject.Chart

…тем самым, в переменную MyChart будет помещена пустая диаграмма, которую можно настроить любым требующимся образом. Но, прежде чем перейти непосредственно к диаграмме, отформатируем область диаграммы, в которой она содержится, то есть объект MyChartObject. Пусть рамка контейнера обладает скругленными углами (свойство RoundedCorners) и отбрасывает тень (свойство Shadow):

With MyChartObject

.Name = "MyDia"

.RoundedCorners = True

.Shadow = True

End With

В результате выполнения описанного выше программного кода под таблицей появится пока пустой контейнер диаграммы с заданными характеристиками (рис. 8.22).

Метод SetSourceData: создание обычной гистограммы

Для того чтобы в созданном контейнере появилась диаграмма, отображающая нужные данные, достаточно лишь вызвать метод SetSourceData созданной диаграммы, и в качестве параметра указать диапазон A1:H4, а также, при помощи константы xlRows, указать, что развертывание оси значений следует производить по строкам таблицы (константа xlColumns задала бы считывание данных по столбцам).

MyChart.SetSourceData Range("A1:H4"), xlRows

MyChart.HasLegend = True

В результате диаграмма приобретет свой простейший вид, “обычная гистограмма” — один из множества типов, который, тем не менее, вполне наглядно представляет содержимое таблицы

(рис. 8.23).

216 Глава 8. VBA-программирование: примеры и иллюстрации

Рис. 8.23. После задания области отображаемых значений диаграмма принимает свой простейший вид — “обычная гистограмма“

Свойство HasLegend

При помощи свойства HasLegend можно разрешить или запретить отображение легенды диаграммы.

Обратите внимание на тот факт, что легенда правильно отображает имена для рядов данных “Иванов”, “Петров”, “Сидоров”, а ось значений снабжена подписями — названиями месяцев. Уверяем, программисту пришлось бы немало потрудиться, чтобы снабдить диаграмму такими атрибутами, если бы в качестве диапазона была указана область B2:H4, содержащая лишь “голые” цифровые данные. Но в данном случае был указан диапазон A1:H4, включающий строку и столбец заголовков. Метод SetSourceData самостоятельно “разобрался”, что тут к чему, и правильно все распознал.

Свойство ChartType: задание типа диаграммы

Тип диаграммы задается значением свойства ChartType. Объект типа Chart различает несколько десятков видов диаграмм. Например, чтобы преобразовать созданную обячную гистограмму в трехмерную гистограмму, необходимо загрузить ее в свойство ChartType константу

xl3DColumn.

MyChart.ChartType = xl3DColumn

В результате диаграмма станет объемной, как показано на рис. 8.24.

Представление данных в MS Office 217

Рис. 8.24. Диаграмма преобразовалась в трехмерную гистограмму

Метод ApplyCustomType: создание пользовательского типа диаграмм

Кроме изменения значения свойства ChartType, тип диаграммы можно изменить также при помощи метода ApplyCustomType, которому в качестве параметра можно передать те же самые константы типов, которые используются в свойстве ChartType. Впрочем, возможности метода значительно шире — он позволяет, кроме того, определять пользовательские типы диаграмм.

MyChart.ApplyCustomType xl3DArea

В результате вызова метода ApplyCustomType с параметром xl3DArea диаграмма преобразится в “объемную диаграмму с областями” (рис. 8.25).

Рис. 8.25. Диаграмма преобразовалась в “объемную диаграмму с областями”

218 Глава 8. VBA-программирование: примеры и иллюстрации

ПРИМЕЧАНИЕ

При изменении типа диаграммы необходимо учитывать одно обстоятельство. От выбранного типа диаграммы зависит набор доступных свойств и методов Chart-объекта. Например, для двумерных диаграмм не имеют смысла многие свойства диаграмм трехмерных. Поэтому перемена типа “на лету” может приводить к ошибкам, если вопрос “совместимости” меняющихся типов недостаточно продуман.

Свойство HasTitle: создание заголовка диаграммы

Чтобы снабдить диаграмму заголовком, воспользуемся свойством HasTitle. Для этого ему надо присвоить значение True:

MyChart.HasTitle = True

Свойство ChartTitle

Без этого присваивания последующий код может привести к ошибке. Теперь, поскольку диаграмме разрешено иметь заголовок, можно обратиться к свойствам объекта ChartTitle, который представляет собой заголовок диаграммы. Зададим текст и размер шрифта для заголовка:

With MyChart.ChartTitle

.Characters.Text = "Продажи по месяцам в разрезе сотрудников"

.Font.Size = 10

End With

В результате контейнер диаграммы получит заголовок, автоматически уменьшив размер собственно диаграммы, чтобы добавленная надпись поместилась в него (рис. 8.26).

Зададим далее размер шрифта легенды, …

MyChart.Legend.Font.Size = 10

Рис. 8.26. Диаграмма снабжена заголовком

Представление данных в MS Office 219

Семейство Axes: форматирование осей диаграммы

Число осей зависит от типа диаграммы. У трехмерных диаграмм различают ось значений, ось категорий и ось рядов данных. Все они доступны в семействе Axes соответствующего Chart- объекта, причем требуемая из осей указывается при помощи индекса-константы. Вот, как будет отформатирована ось категорий, то есть, в данном случае, ось месяцев года:

With MyChart.Axes(xlCategory)

.HasMajorGridlines = True

.TickLabels.Font.Size = 8 End With

Для оси категорий было разрешено отображение основных линий сетки, а также задан размер шрифта для подписи делений шкалы по этой оси.

Затем, аналогичным образом отформатируем ось рядов данных, то есть ту горизонтальную ось, по которой изменяются фамилии сотрудников:

With MyChart.Axes(xlSeriesAxis)

.HasMajorGridlines = True

.TickLabels.Font.Size = 8 End With

В результате вид диаграммы снова изменится (рис. 8.27).

Примеры форматирования диаграмм

Как еще можно усовершенствовать диаграмму? Тысячей различных способов — объект Chart поистине “многолик”. Простое перечисление свойств диаграммы, поддающихся настройке, заняло бы много места. Не будем даже и пытаться этого делать, просто приведем еще несколько примеров.

Рис. 8.27. Отформатированы оси категорий и рядов данных

Свойства HasTitle и AxisTitle: создание заголовков осей диаграммы

Для того чтобы снабдить оси заголовками, необходимо, во-первых, разрешить отображение заголовков (свойство HasTitle), а во-вторых — настроить свойства объекта AxisTitle. Как об-

220 Глава 8. VBA-программирование: примеры и иллюстрации

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

With MyChart.Axes(xlCategory)

.HasTitle = True

.AxisTitle.Font.Size = 8

.AxisTitle.Caption = "Месяцы года" End With

Для того чтобы выполнить аналогичную операцию с осью рядов данных, необходимо указать индекс этой оси в семействе Axes — это должна быть константа xlSeriesAxis:

With MyChart.Axes(xlSeriesAxis)

.HasTitle = True

.AxisTitle.Font.Size = 8

.AxisTitle.Caption = "Сотрудники" End With

Наконец, константа xlValue позволит сделать то же самое с осью значений:

With MyChart.Axes(xlValue)

.HasTitle = True

.AxisTitle.Font.Size = 8

.AxisTitle.Caption = "Продажи" End With

В результате в области диаграммы появятся заголовки осей, как показано на рис. 8.28.

Рис. 8.28. Все три оси объемной диаграммы теперь снабжены заголовками

Свойства Elevation, Rotation и

Perspective: поворот диаграммы вокруг осей

Любую трехмерную диаграмму можно поворачивать вокруг любой из осей, меняя углы возвышения (свойство Elevation), поворота (свойство Rotation) и перспективы (свойство

Perspective).

Представление данных в MS Office 221

Рис. 8.29. Диаграмма повернулась на различные углы вокруг всех своих осей. Область диаграммы залита текстурой “белый мрамор“.

Например, развернем созданную диаграмму следующим образом:

MyChart.Elevation = 10

MyChart.Rotation = 120

MyChart.Perspective = 30

Изменение заливки области диаграммы

Для этого необходимо задать для области диаграммы заливку текстурой. Выберем текстуру “белый мрамор”:

MyChart.ChartArea.Fill.PresetTextured msoTextureWhiteMarble

В результате диаграмма будет повернута в соответствии с заданными углами и ее фон изменится, как показано на рис. 8.29.

Соседние файлы в папке Книги