
Diagrammy_v_Excel_Dzhon_Uokenbakh_2003
.pdfIf TypeName(Selection) <> "Range" Then Exit Sub Set DataRange = Selection
ChtTop = DataRange.Top + DataRange.Height
ChtLeft = DataRange.Left + DataRange.Width
Set ChtObj = ActiveSheet.ChartObjects.Add _ (ChtLeft, ChtTop, 300, 200)
With ChtObj.Chart
.ChartType = xlColumnClustered
.SetSourceData Source:=DataRange, PlotBy:=xlColurans
.HasLegend = False
.HasTitle = True
.ChartTitle.Characters.Text = "Заголовок диаграммы"
.Parent.Select End With
End Sub
Макрос начинается с объявления четырех вспомогательных переменных. Затем проверяется, выделен ли диапазон. Если нет, то макрос завершается. Переменная DataRange устанавливается таким образом, чтобы представлять вьщеленный диапа зон. В переменные ChtTop и ChtLef t записываются координаты левого верхнего угла диаграммы. Они вычисляются на основе параметров выделенного диапазона.
Затем с помощью метода Add коллекции Chartobjects добавляется объект Chartobject. Обратите внимание: в записанном макросе для этого используется метод Add коллекции Charts, в результате чего в рабочую книгу добавляется новый лист диа грамм. Добавление объекта Chartobject — более эффективный способ, поскольку при его создании можно задать его размеры и положение (передав их в качестве аргументов).
Дальше код устанавливает различные свойства объекта chart, входящего в объект Chartobject. Последний оператор (Parent.Select) выделяет созданный объект Chartobject.
Макрос Создать Диаграмму можно модифицировать различными способами. На пример, можно задавать другой тип диаграммы, устанавливать цвета, добавлять или удалять линии сетки и т.д.
Создание диаграмм на основе данных разных листов
в примере этого раздела используется рабочая книга, содержащая пять рабочих листов. Макрос СоздатьПятьДиаграмм создает пять внедренных диаграмм на основе данных, рас положенных в разных листах. Проблема состоит в том, что разные листы содержат различ ные диапазоны данных — меняется количество строк данных и, следовательно, номера по следних строк, используемых диаграммами. На рис. 16.9 показан один из рабочих листов (остальные отличаются от него количеством строк данных).
ie|Pici6_09.Ki$ |
в |
g |
- |
g — - |
ШтШ^^ШШ |
|
|
2 |
¥:^^J$^i0. |
•• g - . , . , ; , —jiB |
|||||
ЫШУУШЛ |
1 |
|
|
|
|
|
|
уШ |
|
|
|
|
|
^ 1 |
|
3 |
Представитель |
Янв |
Фев |
|
Map |
Ито1:н la кв.1 |
у |
4 |
Джонсон |
$9 282 |
$3 486 |
|
$9 483 |
$22 251 |
|
6 |
Уилсон |
$11 493 |
$10 696 |
|
$8 497 |
$30 686 |
|
6 |
Фернандес |
$10172 |
$8 139 |
|
$9 704 |
$28 015 |
щ |
7 |
Кавалиер |
$10 356 |
$3 251 |
|
$6 955 |
$20 562 |
|
|
|
||||||
8 |
Уэснер |
$12 630 |
$3 763 |
|
$5 364 |
$21 757 |
|
9 |
Питтман |
$4 649 |
$8 484 |
|
$11237 |
$24 370 |
|
Ш |
Всего |
$58 582 |
$37 819 |
|
$51 240 |
$147 641 |
|
11 |
|
|
|
|
|
|
|
лп |
!• Hf^ iSftatp&mb../}Ькг1\пис Т 2 / ; > К ? Э / А И (Шл1, :" -У::-:^ Л |
|
|||||
\н 4 |
|
||||||
Рис. 16.9. Один из пяти рабочих листов, используемых при |
|||||||
создании диаграмм |
|
|
|
|
|
||
410 |
|
|
|
|
Часть III. Использование VBA |
Рис, 16J2. Метод Input Box выводит диалоговое окно, пригла шающее пользователя задать первую ячейку диапазона
Макрос ЗадатьДиапазонСПодписями похож на предьщущие макросы, за исключе нием того, что в него добавлен код вывода диалогового окна. Адрес указанной поль зователем ячейки присваивается переменной RngLabels (это объект типа Range), Об ратите внимание на оператор, проверяющий, задал ли пользователь какую-либо ячей ку. Если пользователь, ничего не задав, щелкнул на кнопке Отмена, то макрос завершается. Оператор Error Resume Next необходим потому, что без него щелчок на кнопке Отмена влечет за собой ошибку. Обратите также внимание на второй опе ратор Set, в котором используется объект RngLabels. Благодаря этому оператору объекту RngLabels присваивается только первая ячейка, даже если пользователь по небрежности выбрал не одну, а несколько ячеек.
Sub ЗадатьДиапазонСПодписямиО Dim RngLabels As Range Dim Ser As Series
Dim i As Long
On Error Resume Next
Set RngLabels = Application.InputBox _
(prompt:="Адрес первой ячейки с подписями:", Туре:=8)
If RngLabels |
Is |
Nothing Then Exit Sub |
'Отмена |
|||
Set |
RngLabels |
= |
RngLabels(1) |
|
||
On Error |
GoTo 0 |
|
|
_ |
||
Set |
Ser |
= ActiveSheet.ChartObjects(1) |
||||
|
|
|
|
. Chart . SeriesCollection(1) |
||
Ser.HasDataLabels = True |
|
|||||
Counter |
= 0 |
|
|
|
|
|
For |
Each Pt In Ser . Points |
|
||||
|
Pt.DataLabel.Text |
= RngLabels.Offset(Counter, 0) |
||||
Next |
Counter = Counter |
+ 1 |
|
|||
Pt |
|
|
|
|
|
End Sub
В рабочей книге Р1с1б_гистограмма с подписями данных.xls приведен ана логичный пример для гистограммы.
Надстройка JWalk Chart Tools содержит утилиту, применяющую подписи дан ных к активной диаграмме.
Экспорт диаграмм как файлов GIF
Сохранить диаграмму как файл GIF несложно. Для этого достаточно запустить ме тод Export объекта chart. Ниже приведен макрос, сохраняющий активную диаграм му в файле Диаграмма1 .gif.
Глава 16. Использование VBA в диаграммах |
415 |