Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1844to1848
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Gradient Stop aus Wert aus Zelle

Gradient Stop aus Wert aus Zelle
06.09.2021 16:09:50
Achim
Hallo zusammen,
ich möchte gerne die Position des GradientStops beim Farbverlauf aus einem Zellwert auslesen. Bisher habe ich dies nur als Konstante hinbekommen (hier 0,25 bzw 1)
Nun sollen diese Werte aus einer Zelle ausgelesen werden. Könnt Ihr mir helfen ?
Danke
Achim
Makro5 Makro
'
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.PlotArea.Select
For i = (Selection.Format.Fill.GradientStops.Count) To 3 Step -1
Selection.Format.Fill.GradientStops.Delete (i)
Next
Selection.Format.Fill.GradientStops(1).Color.RGB = RGB(255, 0, 0)
Selection.Format.Fill.GradientStops(1).Position = 0.25
Selection.Format.Fill.GradientStops.Insert RGB(0, 0, 255), 0.75
Selection.Format.Fill.GradientStops.Insert RGB(255, 255, 255), 1
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Dein Programm ist ineffektiv, ...
08.09.2021 04:39:18
Luc:-?
…Achim;
es ist zwar kein Problem, die Positionen und Farben aus Zellen auszulesen, aber es muss bei Änderung 2× ausgeführt wdn, um das richtige Ergebnis zu liefern. Genauso kann man die Datei so oft speichern wie man will, es wird trotzdem nachgefragt, ob gespeichert wdn soll (Xl15/2013). Letzteres mag eine Xl-Macke sein, Ersteres deutet aber auf Unvollständigkeit hin, ganz abgesehen mal davon, dass die PlotArea schon Verlaufsfarben haben muss.
Ich arbeite noch an Verbesserungen.
Übrigens, kann man die Farben auch fast exakt von einander absetzen, ohne Verlauf.
Morhn, Luc :-?
Anzeige
AW: Dein Programm ist ineffektiv, ...
08.09.2021 08:18:48
Achim
Hey Luc:-?
Danke dass du dich der Sache angenommen hast !!
Hier nochmal das komplette Listing:

Sub Makro5()
' Makro5 Makro
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.PlotArea.Select
For i = (Selection.Format.Fill.GradientStops.Count) To 3 Step -1
Selection.Format.Fill.GradientStops.Delete (i)
Next
Selection.Format.Fill.GradientStops(1).Color.RGB = RGB(255, 0, 0)
Selection.Format.Fill.GradientStops(1).Position = Mitte
Selection.Format.Fill.GradientStops(2).Color.RGB = RGB(0, 255, 0)
Selection.Format.Fill.GradientStops(2).Position = 0.5
Selection.Format.Fill.GradientStops.Insert RGB(0, 0, 255), 0.75
Selection.Format.Fill.GradientStops.Insert RGB(255, 255, 255), 1
End Sub
Das funktioniert soweit auch so, wie ich es gebrauchen kann. Vielleicht kannst du ja beispielhaft an einem "Selection.Format.Fill.GradientStops" zeigen, wie man den Wert aus einer Zelle dort als Positionswert übernehmen kann.
Danke für Deine Mühe
Achim
Anzeige
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 :-?
Anzeige
Verlass dich nicht auf die eMail-Nachricht, ...
11.09.2021 17:31:15
Luc:-?
…Achim,
diese Benachrichtigung scheint zZ nicht zuverlässig zu fktionieren!
Nebenbei, mit folgendem Programm kann man 4 gleichmäßige, senkrecht angeordnete FarbBereiche (ohne FarbVerlauf) für die PlotArea eines Diagramms erzeugen:

Sub Diagr4Frb()
Const naChart$ = "Diagramm 1", adVlfFrbStops$ = "D1:G1"
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(1) + 0.001, , 3
.GradientStops.Insert vlfFrbStops.Cells(2).Interior.Color, vlfFrbStops.Cells(2), , 4
.GradientStops.Insert vlfFrbStops.Cells(3).Interior.Color, vlfFrbStops.Cells(2) + 0.001, , 5
.GradientStops.Insert vlfFrbStops.Cells(3).Interior.Color, vlfFrbStops.Cells(3), , 6
.GradientStops.Insert vlfFrbStops.Cells(4).Interior.Color, vlfFrbStops.Cells(3) + 0.001, , 7
.GradientStops.Insert vlfFrbStops.Cells(4).Interior.Color, vlfFrbStops.Cells(4), , 8
End With
Set ch = Nothing: Set vlfFrbStops = Nothing: Set ws = Nothing
End Sub
Luc :-?
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige