VBA unterschiedliche Diagrammtypen färben
28.05.2018 11:40:38
Beverly
Hi Sarah,
in deiner Mappe gibt es folgende Diagrammtypen:
Kreis, gruppierte Säulen, Sunburst, gestapelte Säulen, gestapelte Balken, nicht jedoch das von dir genannte Treemap-Diagramm.
Zu deinem Problem ist folgendes zu sagen:
1. die beiden gestapelten Diagrammtypen haben nicht 1 Datenreihe mit mehreren Datenpunkten, sondern mehrere Datenreihen mit 1 Datenpunkt - deshalb muss für diesen Diagrammtyp die Schleife über alle Datenreihen und nicht über alle Datenpunkte laufen. Da das gestapelte Balkendiagramm andere Werte in der Darstellung hat als die gestapelte Säule, muss dieses außern vor bleiben, oder du machst einen extra Code dafür. Du musst also den Code je nach Diagramm-Typ unterteilen.
2. das Sunburst-Diagramm in deiner Mappe lässt sich farblich nicht per VBA bearbeiten - wenn du stattdessen ein Kreis(Dougnut)-Diagramm verwendest, ist das dagegen möglich, obwohl die Darstellung der Beschriftung für diesen Diagrammtyp sicherlich optisch nicht so "schön" ist wie bei einem Sunburst-Diagramm.
Außerdem würde ich generell nicht ColorIndex verwenden sondern Color.
Sub DiagrammFormat()
Dim i As Long
Dim Farbe As Long
Dim chrDia As ChartObject
Dim serReihe As Series
For Each chrDia In ActiveSheet.ChartObjects
Select Case chrDia.Chart.ChartType
Case xlColumnStacked
' Schleife über alle Datenreihen
For Each serReihe In chrDia.Chart.SeriesCollection
Select Case serReihe.Name
Case "Verderb"
Farbe = 65535 ' Gelb
Case "zu viel"
Farbe = 16711680 ' Blau
Case "Transport"
Farbe = 255 ' Rot
Case "Sonstiges"
Farbe = 8388736 ' Violett
Case "zu spät"
Farbe = 26367 ' Orange
End Select
serReihe.Interior.Color = Farbe
Next serReihe
Case xlDoughnut, xlPie, xlColumnClustered
' Schleife über alle Datenpunkte
With chrDia.Chart.SeriesCollection(1)
For i = 1 To .Points.Count
Select Case WorksheetFunction.Index(.XValues, i)
Case "Verderb"
Farbe = 65535 ' Gelb
Case "zu viel"
Farbe = 16711680 ' Blau
Case "Transport"
Farbe = 255 ' Rot
Case "Sonstiges"
Farbe = 8388736 ' Violett
Case "zu spät"
Farbe = 26367 ' Orange
End Select
.Points(i).Interior.Color = Farbe
Next
End With
End Select
Next chrDia
End Sub
Der Code läuft über alle Diagramme, wobei keines der Diagramme selektiert werden muss.