Страницы: 1
RSS
Стиль диаграммы VBA
 
Доброго времени суток, господа. Возникла необходимость создавать посредством VBA круговые диаграммы с определённым оформлением (см. изображение).К сожалению не смог ничего толком найти по интересующей меня теме. Макрорекордер выдал нечто вроде:

Код
Sub Макрос1()

    Range("J2:M3").Select
    ActiveSheet.Shapes.AddChart2(251, xlPie).Select
    ActiveChart.SetSourceData Source:=Range("Лист1!$J$2:$M$3")
    ActiveSheet.Shapes("Диаграмма 1").ShapeStyle = msoShapeStylePreset25
End Sub
Естественно при попытке воспроизвести макрос- код не работает. Возможно ли вообще через VBA отформатировать подобным образом диаграмму?
Заранее благодарен.
С уважением,
athe.
 
Цитата
athe написал:
при попытке воспроизвести макрос- код не работает
Если предварительно удалить диаграмму с листа - код работает.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Михаил Лебедев написал:
Если предварительно удалить диаграмму с листа - код работает.
Доброго времени суток. Спасибо за ответ. Проверил. Код создаёт диаграмму без градиентной заливки, а в этом собственно вся соль.
 
Много раз делал красивые диаграммы макросом, и там тоже можно всё настроить.
Вот например код макроса на коленке
Код
Sub Диаграмма()
    Range("J2:M3").Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlPie
    ActiveChart.SetSourceData Source:=Range("Лист1!$J$2:$M$3")
    ActiveChart.ClearToMatchStyle
    ActiveChart.ChartStyle = 18
    ActiveChart.ClearToMatchStyle
    With ActiveSheet.Shapes(1).Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorAccent1
        .ForeColor.TintAndShade = 0.3399999738
        .ForeColor.Brightness = 0
        .BackColor.ObjectThemeColor = msoThemeColorAccent1
        .BackColor.TintAndShade = 0.7649999857
        .BackColor.Brightness = 0
        .PresetGradient msoGradientHorizontal, 1, msoGradientOcean
    End With
    ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)
    ActiveChart.SetElement (msoElementChartTitleAboveChart)
End Sub

За градиент отвечает строка
Код
.PresetGradient msoGradientHorizontal, 1, msoGradientOcean
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox,большое спасибо. Банально не додумался макрорекордером записывать ручную настройку. Вопрос решён.
Страницы: 1
Наверх