Zuerst einmal ...
09.09.2021 03:18:39
Luc:-?
...muss man verstehen, was die Positionsangabe bedeutet, Achim.
Du hattest für G'Stop1 0.25 (= bei 25% der ObjektBreite), für G'Stop2 0.75 angegeben. Das bedeutet jeweils, dass genau an diesen Positionen die Farbe Rot bzw Blau ist. Die MischFarbe mit gleichem Rot- und BlauAnteil liegt dann genau dazwischen, nämlich auf Position 0.5 usw.
Nun erzeugst du aber erst mal einen 2-Farben-Verlauf, was auch richtig ist, falls die PlotArea zuvor nicht- oder andersfarbig war. Aber egal, ob 2- oder 1farbiger Verlauf, wdn so immer 2 GradientStops angelegt, 1 bei 0 und 2 bei 1, also Anfang der 1.Farbe und Ende der 2. Der MischPkt liegt dann bei 0.5.
Das heißt für deine Werte, du verschiebst G'Stop1 auf 0.25, wodurch Position 0 keinen Wert mehr hat und ein evtl alter Wert erhalten bleibt oder hier ein StandardFarbWert verwendet wird, denn die 2 zuvor angelegten G'Stops können nicht gelöscht wdn, weil sie den MindestBedarf für diese Färbung darstellen. Du musst also auch der Position 0 eine Farbe zuordnen, die auch gleich der nächsten auf 0.25 sein kann, wodurch dieser Bereich, das 1.Viertel, einheitlich rot gefärbt wird. Der 2.G'Stop kann dann ebenfalls nicht eingefügt wdn, sondern nur verschoben (und gefärbt) wdn. Du hast also den falschen Index für Rot benutzt. Alle weiteren können dann problemlos in aufsteigender Reihenfolge eingefügt wdn. Das sähe dann für dein 3-Farben-Modell so aus:
Sub Diagr3FrbVlf()
Const naChart$ = "Diagramm 1", adVlfFrbStops$ = "D1:F1" 'hier ggf Texte anpassen!
Dim i As Integer, s As Integer, vlfFrbStops As Range, ch As Chart, ws As Worksheet
Set ws = ActiveSheet: Set vlfFrbStops = ws.Range(adVlfFrbStops)
Set ch = ws.ChartObjects(naChart).Chart
With ch.PlotArea.Format.Fill
.Visible = msoTrue
.TwoColorGradient msoGradientHorizontal, 1
s = .GradientStops.Count
For i = 2 To s - 1
.GradientStops.Delete i
Next i
.GradientStops(1).Color.RGB = vlfFrbStops.Cells(1).Interior.Color
.GradientStops(2).Color.RGB = vlfFrbStops.Cells(1).Interior.Color
.GradientStops(2).Position = vlfFrbStops.Cells(1)
.GradientStops.Insert vlfFrbStops.Cells(2).Interior.Color, vlfFrbStops.Cells(2), , 3
.GradientStops.Insert vlfFrbStops.Cells(3).Interior.Color, vlfFrbStops.Cells(3), , 4
End With
Set ch = Nothing: Set vlfFrbStops = Nothing: Set ws = Nothing
End Sub
Falls dich der FarbVerlauf stört und du lieber klare Grenzen zwischen den 3 FarbBereichen hättest, geht das auch, nur etwas aufwendiger (mehr G'Stops, analog G'Stop1-2 und das für jede Farbe mit jeweils zusätzlichem Start um 0,05…0,1% verschoben), bspw so: 0…0.25 rot, 9.251…0.75 blau, 0.751…1 weiß. Das wären dann 6 G'Stops. Ggf kann man noch schmale dunkle Streifen dazwischenschieben, um die Grenzen schärfer zu machen. Mit Verlaufsfarben in Zellen hatte ich das schon vor Jahren erfolgreich probiert, obwohl man das bisher (Xl15/2013) nicht manuell erreichen kann. die Begriffe sind nur andere. Übrigens war die Xl-/VBA-Hilfe hier noch nie besonders hilfreich und ist es in der (neuen) Online-Version erst recht nicht.
Anmerkung: Ich hatte natürlich mit den ursprünglichen 3 Farben gearbeitet und so ist auch das Pgm. Die 4., Gelb, wirst du nach diesem Schema wohl selbst einfügen können - 1 Zelle mehr. Apropos, das Pgm übernimmt auch die Farben aus den Zellen.
Morhn, Luc :-?