Option Explicit

Sub ChangeSeries1Color()
    Dim MyChartObject As ChartObject
    Dim MyChart As Chart
    Dim MySeries As Series
    Dim MyChartFormat As ChartFormat
    Dim MyFillFormat As FillFormat
    Dim MyColorFormat As ColorFormat

'   Create the objects
    Set MyChartObject = ActiveSheet.ChartObjects("Chart 1")
    Set MyChart = MyChartObject.Chart
    Set MySeries = MyChart.SeriesCollection(1)
    Set MyChartFormat = MySeries.Format
    Set MyFillFormat = MyChartFormat.Fill
    Set MyColorFormat = MyFillFormat.ForeColor

'   Change the color
    MyColorFormat.RGB = vbRed
End Sub

Sub AddPresetGradient()
    Dim MyChart As Chart
    Set MyChart = ActiveSheet.ChartObjects("Chart 2").Chart
    With MyChart.SeriesCollection(1).Format.Fill
        .PresetGradient _
            Style:=msoGradientHorizontal, _
            Variant:=1, _
            PresetGradientType:=msoGradientFire
    End With
End Sub

Sub RecolorChartAndPlotArea()
'   Use theme colors for chart area and plot area
    Dim MyChart As Chart
    Set MyChart = ActiveSheet.ChartObjects("Chart 3").Chart
    With MyChart
        .ChartArea.Format.Fill.ForeColor.ObjectThemeColor = _
             msoThemeColorAccent6
        .ChartArea.Format.Fill.ForeColor.TintAndShade = 0.9
        .PlotArea.Format.Fill.ForeColor.ObjectThemeColor = _
             msoThemeColorAccent6
        .PlotArea.Format.Fill.ForeColor.TintAndShade = 0.5
    End With
End Sub

Sub UseRandomColors()
    Dim MyChart As Chart
    Set MyChart = ActiveSheet.ChartObjects("Chart 4").Chart
    With MyChart
        .ChartArea.Format.Fill.ForeColor.RGB = RandomColor
        .PlotArea.Format.Fill.ForeColor.RGB = RandomColor
        .SeriesCollection(1).Format.Fill.ForeColor.RGB = RandomColor
        .SeriesCollection(2).Format.Fill.ForeColor.RGB = RandomColor
        .Legend.Font.Color = RandomColor
        .ChartTitle.Font.Color = RandomColor
        .Axes(xlValue).MajorGridlines.Border.Color = RandomColor
        .Axes(xlValue).TickLabels.Font.Color = RandomColor
        .Axes(xlValue).Border.Color = RandomColor
        .Axes(xlCategory).TickLabels.Font.Color = RandomColor
        .Axes(xlCategory).Border.Color = RandomColor
    End With
End Sub

Function RandomColor()
    RandomColor = Application.RandBetween(0, RGB(255, 255, 255))
End Function

Sub UseRandomThemeColors()
    Dim MyChart As Chart
    Set MyChart = ActiveSheet.ChartObjects("Chart 5").Chart
    With MyChart
        .ChartArea.Format.Fill.ForeColor.ObjectThemeColor = RandomThemeColor
        .ChartArea.Format.Fill.ForeColor.TintAndShade = Application.RandBetween(-100, 100) / 100
        
        .PlotArea.Format.Fill.ForeColor.ObjectThemeColor = RandomThemeColor
        .PlotArea.Format.Fill.ForeColor.TintAndShade = Application.RandBetween(-100, 100) / 100
        
        .SeriesCollection(1).Format.Fill.ForeColor.ObjectThemeColor = RandomThemeColor
        .SeriesCollection(1).Format.Fill.ForeColor.TintAndShade = Application.RandBetween(-100, 100) / 100
        
        .SeriesCollection(2).Format.Fill.ForeColor.ObjectThemeColor = RandomThemeColor
        .SeriesCollection(2).Format.Fill.ForeColor.TintAndShade = Application.RandBetween(-100, 100) / 100
        
'       the following use the "old" method
        .Legend.Font.Color = RandomColor
        .ChartTitle.Font.Color = RandomColor
        .Axes(xlValue).MajorGridlines.Border.Color = RandomColor
        .Axes(xlValue).TickLabels.Font.Color = RandomColor
        .Axes(xlValue).Border.Color = RandomColor
        .Axes(xlCategory).TickLabels.Font.Color = RandomColor
        .Axes(xlCategory).Border.Color = RandomColor
    End With
End Sub

Function RandomThemeColor()
    RandomThemeColor = Application.RandBetween(1, 10)
End Function


Sub ResetAllCharts()
    Dim Cht As ChartObject
    For Each Cht In ActiveSheet.ChartObjects
        Cht.Chart.ClearToMatchStyle
    Next Cht
End Sub