I'm trying to loop through the entire series to color all points (bars) in the chart pictured below using VBA. This is what I have so far
Sub ChartColors()
Dim sld As Slide
Dim shp As Shape
Dim cht As Chart
Dim cats As Variant
Dim j As Integer
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
If shp.Type = msoChart Then
cats = shp.Chart.Axes(xlCategory).CategoryNames
For j = LBound(cats) To UBound(cats)
With shp.Chart.SeriesCollection(1).Points(j).Format.Fill.ForeColor
Select Case cats(j)
Case "Apple"
.RGB = RGB(192, 0, 0)
Case "Banana"
.RGB = RGB(0, 112, 192)
Case Else
.RGB = RGB(0, 176, 80)
End Select
End With
Next j
End If
Next shp
Next sld
End Sub
CodePudding user response:
Try the following code...
Option Explicit
Sub ChartColors()
Dim sld As Slide
Dim shp As Shape
Dim cht As Chart
Dim sr As Series
Dim pt As Point
Dim cats As Variant
Dim i As Integer
Dim j As Integer
For Each sld In ActivePresentation.Slides
For Each shp In sld.Shapes
If shp.Type = msoChart Then
Set cht = shp.Chart
With cht
For i = 1 To .SeriesCollection.Count
Set sr = .SeriesCollection(i)
For j = 1 To sr.Points.Count
cats = sr.XValues()(j)
Select Case cats
Case "Apple"
sr.Points(j).Format.Fill.ForeColor.RGB = RGB(192, 0, 0)
Case "Banana"
sr.Points(j).Format.Fill.ForeColor.RGB = RGB(0, 112, 192)
Case Else
sr.Points(j).Format.Fill.ForeColor.RGB = RGB(0, 176, 80)
End Select
Next j
Next i
End With
End If
Next shp
Next sld
End Sub