srSerie.ChartType = xlBarClustered Or _
srSerie.ChartType = xlBarStacked Or _
srSerie.ChartType = xlBarStacked100) Then
' Сохранение прежнего цвета категории
dblColor = srSerie.Interior.Color
' Сохранение стиля линий
intBorderLineStyle = srSerie.Border.LineStyle
' Цвет границы
intBorderColorIndex = srSerie.Border.ColorIndex
' Толщина линий границы
intBorderWeight = srSerie.Border.Weight
' Создание автофигуры
Set shpShape = ActiveSheet.shapes.AddShape _
(msoShapeRectangle, 1, 1, 100, 100)
With shpShape
' Закрашиваем нужным цветом
.Fill.ForeColor.RGB = dblColor
' Делаем прозрачной
.Fill.Transparency = 0.4
' Убираем линии
.Line.Visible = msoFalse
End With
' Копируем автофигуру в буфер обмена
shpShape.CopyPicture Appearance:=xlScreen, _
Format:=xlPicture
' Вставляем автофигуру в изображения столбцов _
категории и настраиваем
With srSerie
' Собственно вставка
.Paste
' Возвращаем на место толщину линий
.Border.Weight = intBorderWeight
' Стиль линий
.Border.LineStyle = intBorderLineStyle
' Цвет границы
.Border.ColorIndex = intBorderColorIndex
End With
' Автофигура больше не нужна
shpShape.Delete
End If
Next srSerie
End Sub
После применения данного макроса диаграмма станет прозрачной. Степень прозрачности указывается в строке. Fill. Transparency = 0. 4 – в приведенном примере она равна 40 %. При необходимости данный параметр можно изменить по своему усмотрению. Например, на рис. 4.7 показана диаграмма, у которой прозрачность составляет 60 % (эта же диаграмма изображена на рис. 4.4 в непрозрачном виде).
Данный трюк применяется к созданным ранее диаграммам.
Рис. 4.7. Прозрачная диаграмма
Построение диаграммы на основе данных нескольких рабочих листов
В процессе работы нередко возникает необходимость в оперативной обработке данных, которые хранятся на нескольких рабочих листах. Как известно, одним из способов обработки информации является построение диаграмм. В этом разделе мы рассмотрим, каким образом можно построить одновременно несколько диаграмм, исходными данными для которых будет информация, расположенная на нескольких рабочих листах.
Предположим, что у нас имеются пять разных таблиц, которые расположены на пяти рабочих листах, причем количество строк в этих таблицах различается. Одна из таких таблиц показана на рис. 4.8.
Рис. 4.8. Пример таблицы
Для построения диаграмм на основании данных, хранящихся в этих таблицах, можно использовать макрос, код которого приведен в листинге 4.11.
Листинг 4.11. Одновременное создание нескольких диаграмм
Sub ManyCharts()
Dim intTop As Long, intLeft As Long
Dim intHeight As Long, intWidth As Long
Dim sheet As Worksheet
Dim lngFirstRow As Long ' Первая строка с данными
Dim intSerie As Integer ' Текущая категория диаграммы
Dim strErrorSheets As String ' Список листов, для которых _
не удалось построить диаграммы
intTop = 1 ' Верхняя точка первой диаграммы
intLeft = 1 ' Левая точка каждой диаграммы
intHeight = 180 ' Высота каждой диаграммы
intWidth = 300 ' Ширина каждой диаграммы
' Построение диаграммы для каждого листа, кроме текущего
For Each sheet In ActiveWorkbook.Worksheets
If sheet.Name <> ActiveSheet.Name Then
' Первый заполненный ряд
lngFirstRow = 3
' Первая категория
intSerie = 1
On Error GoTo DiagrammError
' Добавление и настройка диаграммы
With ActiveSheet.ChartObjects.Add _
(intLeft, intTop, intWidth, intHeight).Chart
Do Until IsEmpty(sheet.Cells(lngFirstRow + intSerie, 1))
' Создание ряда
.SeriesCollection.NewSeries
' Значения для ряда
.SeriesCollection(intSerie).Values = _
sheet.Range(sheet.Cells(lngFirstRow + intSerie, 2), _
sheet.Cells(lngFirstRow + intSerie, 4))
' Диапазон данных для подписей
.SeriesCollection(intSerie).XValues = _
sheet.Range(«B3:D3»)
' Название ряда (берется из столбца "A" таблицы
с данными)
.SeriesCollection(intSerie).Name = sheet.Cells( _
lngFirstRow + intSerie, 1)
intSerie = intSerie + 1
Loop
' Настройка внешнего вида диаграммы
.ChartType = xl3DColumnClustered
.ChartGroups(1).GapWidth = 20
.PlotArea.Interior.ColorIndex = xlNone
.ChartArea.Font.Size = 9
' Диаграмма с легендой
.HasLegend = True
' Заголовок
.HasTitle = True
.ChartTitle.Characters.Text = sheet.Range(«A1»)
' Задание диапазона значений на осях
.Axes(xlValue).MinimumScale = 0
.Axes(xlValue).MaximumScale = 120000
' Стиль линий сетки (прерывистый)
.Axes(xlValue).MajorGridlines.Border. _
LineStyle = xlDot
End With
On Error GoTo 0
' Сдвиг верхней точки следующей диаграммы на высоту _
текущей диаграммы
intTop = intTop + intHeight
AfterError:
End If
Next sheet
If strErrorSheets <> "" Then
' Отобразим список листов, для которых не построили диаграммы
MsgBox «Не удалось построить диаграммы для листов:» &
Chr(13) _
& strErrorSheets, vbExclamation
End If
Exit Sub
DiagrammError:
' Добавление в список имени листа, для которого не смогли _
Читать дальше
Конец ознакомительного отрывка
Купить книгу