Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA Sunburst-Diagramm Farbe ändern.

Forumthread: VBA Sunburst-Diagramm Farbe ändern.

VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 14:28:09
sashinio85
Guten Tag,

ich möchte in der Excel-Datei jedes einzelne Element des Sunburstdiagrammes in die Farben rot, gelb und grün, mit den links angelegten Button, ändern können.

https://www.herber.de/bbs/user/177662.xlsx
Anzeige

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 14:34:15
cysu11
Hi,

so wie das hier und entsprechend für alle Elemente und Farben entsprechend anpassen! :)

Sub Makro1()

ActiveChart.FullSeriesCollection(1).Points(3).Format.Fill.ForeColor.RGB = RGB(255, 0, 0)

End Sub

BR, Alexandra
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 15:23:22
Hans Werner Herber
Hallo,

ich denke, auf diesem Code sollte man aufbauen können:



Sub Felder_VerschiedenFaerben()
Dim cht As Chart
Dim srs As Series
Dim i As Long
Dim farben() As Variant

' Farben definieren (kannst Du beliebig erweitern oder anpassen)
farben = Array(RGB(255, 0, 0), RGB(255, 255, 0), RGB(0, 176, 80), _
RGB(0, 112, 192), RGB(112, 48, 160), RGB(255, 192, 0), _
RGB(91, 155, 213), RGB(155, 187, 89))

' Diagramm auswählen (erstes Diagramm auf dem Blatt)
Set cht = ActiveSheet.ChartObjects(1).Chart

' Letzte Serie (äußerste Ebene)
Set srs = cht.SeriesCollection(cht.SeriesCollection.Count)

' Alle Punkte in der letzten Serie durchlaufen
For i = 1 To srs.Points.Count
' Zyklisch Farbe aus Liste zuweisen
srs.Points(i).Format.Fill.ForeColor.RGB = farben((i - 1) Mod UBound(farben) + 1)
Next i
End Sub
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
05.06.2025 15:18:06
Hans Werner Herber
Hallo,

sorry, da muss ich mich für meine kurze Antwort entschuldigen; ich hatte die Sache zu einfach gesehen.

Als Entschuldigung beiliegend die Arbeitsmappe mit einer Lösung zurück.
Einfach nur auf die jeweiligen Schaltflächen klicken.

Die Downloadadresse:
https://www.herber.de/bbs/user/177676.xlsm

Gruß hans

Der Code:


Option Explicit

Sub FarbwechselSunburst()
Dim btn As Button
Dim cht As Chart
Dim srs As Series
Dim lColor As Long
Dim iPoint As Integer, iCall As Integer
Dim sGreen As String, sYellow As String, sRed As String, sCaller As String, sRGB As String

Set btn = ActiveSheet.Buttons(Application.Caller)
sCaller = btn.Caption

If btn.TopLeftCell.Column = 2 Then
lColor = Range("GREEN").Interior.Color
ElseIf btn.TopLeftCell.Column = 5 Then
lColor = Range("YELLOW").Interior.Color
ElseIf btn.TopLeftCell.Column = 8 Then
lColor = Range("RED").Interior.Color
End If

If sCaller Like "Class I *" Then
If sCaller Like "* innen" Then
Call SetElements(10, lColor, 1)
ElseIf sCaller Like "* mitte" Then
Call SetElements(10, lColor, 2)
ElseIf sCaller Like "* außen" Then
Call SetElements(10, lColor, 3)
End If
ElseIf sCaller Like "*Class II *" Then
MsgBox "Für ""Class II"" existieren keine Daten"
Exit Sub
' If sCaller Like "* innen" Then
' Call SetElements(10, lColor, 1)
' ElseIf sCaller Like "* mitte" Then
' Call SetElements(10, lColor, 2)
' ElseIf sCaller Like "* außen" Then
' Call SetElements(10, lColor, 3)
' End If
ElseIf sCaller Like "*Class III*" Then
If sCaller Like "* innen" Then
Call SetElements(7, lColor, 1)
ElseIf sCaller Like "* mitte" Then
Call SetElements(7, lColor, 2)
ElseIf sCaller Like "* außen" Then
Call SetElements(7, lColor, 3)
End If
ElseIf sCaller Like "*Class V*" Then
If sCaller Like "* innen" Then
Call SetElements(1, lColor, 1)
ElseIf sCaller Like "* mitte" Then
Call SetElements(1, lColor, 2)
ElseIf sCaller Like "* außen" Then
Call SetElements(1, lColor, 3)
End If
Else
If sCaller Like "* innen" Then
Call SetElements(4, lColor, 1)
ElseIf sCaller Like "* mitte" Then
Call SetElements(4, lColor, 2)
ElseIf sCaller Like "* außen" Then
Call SetElements(4, lColor, 3)
End If
End If

End Sub

Sub SetElements(iPunkt As Integer, lColor As Long, iMod As Integer)
Dim cht As Chart
Dim srs As Series
Dim iAct As Integer
Dim lColorA As Long, lColorB As Long, lColorC As Long

'Call ResetChart

Set cht = ActiveSheet.ChartObjects(1).Chart

Set srs = cht.SeriesCollection(1)
lColorA = srs.Points(iPunkt).Format.Fill.ForeColor.RGB
lColorB = srs.Points(iPunkt + 1).Format.Fill.ForeColor.RGB
lColorC = srs.Points(iPunkt + 2).Format.Fill.ForeColor.RGB

If iMod = 1 Then
srs.Points(iPunkt).Format.Fill.ForeColor.RGB = lColor
srs.Points(iPunkt + 1).Format.Fill.ForeColor.RGB = lColorB
srs.Points(iPunkt + 2).Format.Fill.ForeColor.RGB = lColorC
ElseIf iMod = 2 Then
srs.Points(iPunkt + 1).Format.Fill.ForeColor.RGB = lColor
srs.Points(iPunkt + 2).Format.Fill.ForeColor.RGB = lColorC
ElseIf iMod = 3 Then
srs.Points(iPunkt + 2).Format.Fill.ForeColor.RGB = lColor
End If

End Sub

Sub ResetChart()
Dim cht As Chart
Dim srs As Series
Dim iAct As Integer

Set cht = ActiveSheet.ChartObjects(1).Chart
For Each srs In cht.SeriesCollection
For iAct = 1 To 12
srs.Points(iAct).Format.Fill.ForeColor.RGB = RGB(0, 0, 0)
Next iAct
Next srs

End Sub
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 15:32:27
sashinio85
Das hat schonmal funktioniert. Aber keine Ahnung, ob ich es schaffe, alles so umzuändern, wie ich es möchte.
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 15:36:56
Hans Werner Herber
... rumknobeln macht Spaß. Alle motwendigen Elemente sind vorhanden.

Gruß hans
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 15:41:12
cysu11
Hat mein letzter vorschlag nun auch funktioniert?
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 14:43:18
sashinio85
Es klappt leider nicht.

Laufzeitfehler 90

Objektvariable oder WithBlockvariable nicht festgelegt.
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 14:46:10
cysu11
Hi,

probiere mal das:

sub test
ActiveChart.SeriesCollection(1).Points(3).Interior.Color = RGB(255, 0, 0)
end sub

LG, Alexandra
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 14:48:24
sashinio85
Bekomme die gleiche Fehlemeldung.
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 14:49:10
cysu11
Hast du wirklich die Excelversion 2003 noch?
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 15:03:43
sashinio85
Das ist Excel 2019
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 15:25:35
cysu11
HI,

probiere das mal:

Sub testme()
Worksheets("LogLage").ChartObjects(1).Activate
ActiveChart.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
End Sub

LG, Alexandra
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 16:05:09
sashinio85
Das funktioniert eingeschränkt.
Ich kann dort nur von innen nach außen auswählen aber nicht einzelne. Entweder drei Bereiche, wenn ich Points(1) wähle, den Mittleren und Äußeren, wenn ich Points(2) wähle und nur den Äußeren, wenn ich Points(3) wählen. Und das bei allen vier Segmenten. Ich möchte aber jedes Einzelne anwählen.
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 16:11:10
cysu11
Hi,

schau mal, füge den Code in Modul und starte ihn mit F8 im Einzelschritt, dann siehst du dass jedes Element einzeln angesprochen wird:

Sub Makro3()

Dim dgm As Chart
Set dgm = ActiveSheet.ChartObjects(1).Chart

dgm.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(11).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(10).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)

dgm.FullSeriesCollection(1).Points(9).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(8).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(7).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)

dgm.FullSeriesCollection(1).Points(6).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(5).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(4).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)

dgm.FullSeriesCollection(1).Points(3).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(2).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(1).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
End Sub


BR, Alexandra
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 16:39:23
sashinio85
Das hilft leider alles nichts. Ich habe dort 12 Felder und möchte jedes einzelne Feld ändern können.

Feld 1 soll gelb werden, 1 Button, Feld 1 soll rot werden, 1 Button und Feld 1 soll grün werden, auch ein Button.
Und das soll mit allen 12 Feldern funktionieren, ohne das sich ein anderes Feld ändert.
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 16:56:46
cysu11
Hi,

jetzt sehe ich was du meinst, dreht man die Nummern dann wird der gesamte bereich gefärbt. Da habe ich nur ein Lösung für Dich, aber ist mit viel Fleißarbeit verbunden, wie folgt:

Sub Class1Innen()

Dim dgm As Chart
Set dgm = ActiveSheet.ChartObjects(1).Chart
a1 = dgm.FullSeriesCollection(1).Points(10).Format.Fill.ForeColor.RGB
a2 = dgm.FullSeriesCollection(1).Points(11).Format.Fill.ForeColor.RGB
a3 = dgm.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB

dgm.FullSeriesCollection(1).Points(10).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
dgm.FullSeriesCollection(1).Points(11).Format.Fill.ForeColor.RGB = a2
dgm.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB = a3
End Sub


Für Class1 den innenre Segment, zuerst lesen wir die ursprünglichen farben aus, dann ändern wir den gesamten bereich Class1 und gehen von Außen nach Ihnen und formatiern diese in den ursprünglichen Farben! Das musst du dann für jedes segment das innen oder in der Mitte ist machen, für die Außensegment reicht der Einzeiler! ;)

LG, Alexandra
Anzeige
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 17:02:24
sashinio85
Pro Feld, werden 3 Befehle benötige, damit jeweils rot, gelb und grün geschaltet werden können.

Sind die anderen Felder dann a4 bis a12?
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 17:06:23
cysu11
Nein, ich mach dir mal ein komplettes feld fertig, dann kannst du das leichter verstehen
AW: VBA Sunburst-Diagramm Farbe ändern.
04.06.2025 17:24:31
cysu11
und erklärungen dazu:

Sub Class1Innen()

Dim dgm As Chart
Set dgm = ActiveSheet.ChartObjects(1).Chart
a1 = dgm.FullSeriesCollection(1).Points(10).Format.Fill.ForeColor.RGB 'Farbe innerer Kreis auslesen
a2 = dgm.FullSeriesCollection(1).Points(11).Format.Fill.ForeColor.RGB 'Farbe mittlerer Kreis auslesen
a3 = dgm.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB 'Farbe außerer Kreis auslesen

dgm.FullSeriesCollection(1).Points(10).Format.Fill.ForeColor.RGB = RGB(255, 255, 0) 'Class1 innen gelb färben, damit wird gesamt Class1 gefärbt
dgm.FullSeriesCollection(1).Points(11).Format.Fill.ForeColor.RGB = a2 'Class1 mitte auf ursprüngliche Farbe
dgm.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB = a3 ' Class1 Außen auf ursprüngliche Farbe
End Sub

Sub Class1Mitte()
Dim dgm As Chart
Set dgm = ActiveSheet.ChartObjects(1).Chart
a1 = dgm.FullSeriesCollection(1).Points(10).Format.Fill.ForeColor.RGB 'Farbe innerer Kreis auslesen
a2 = dgm.FullSeriesCollection(1).Points(11).Format.Fill.ForeColor.RGB 'Farbe mittlerer Kreis auslesen
a3 = dgm.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB 'Farbe außerer Kreis auslesen

dgm.FullSeriesCollection(1).Points(11).Format.Fill.ForeColor.RGB = RGB(255, 255, 0) ' Class1 mitte gelb färben, damit wird auch außen gefärbt
dgm.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB = a3 ' Class1 Außen auf ursprünglich Farbe setzen
End Sub

Sub Class1Aussen()
Dim dgm As Chart
Set dgm = ActiveSheet.ChartObjects(1).Chart
dgm.FullSeriesCollection(1).Points(12).Format.Fill.ForeColor.RGB = RGB(255, 255, 0) 'Class1 Außen auf gelb färben, mitte und innen bleiben unberührt
End Sub

Sub ROT()
Dim dgm As Chart
Set dgm = ActiveSheet.ChartObjects(1).Chart
dgm.FullSeriesCollection(1).Points(10).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) ' Gesamt Class1 in Rot färben zu Testzwecken
End Sub



Du musst nur doch die "Points" 10 bis 12 durch:
7 bis 9
4 bis 6
1 bis 3
ersetzen für die anderen 3 segmente.

LG, Alexandra
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18