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

Legendeneintrag nach Text-Kriterium einfärben

Forumthread: Legendeneintrag nach Text-Kriterium einfärben

Legendeneintrag nach Text-Kriterium einfärben
08.07.2025 18:27:04
Tim B.
Hallo, ich habe ein Excel-Diagramm mit mehreren Datensätzen und möchte per VBA den Legendeneintrag rot färben, in dessen Name das Wort "stroke" vorkommt.
Das Problem ist, dass die Indizes von SeriesCollection und LegendEntries nicht übereinstimmen. Wenn ich beispielsweise mit folgendem Code arbeite:

    For i = 1 To MyChart.Legend.LegendEntries.Count

If InStr(1, MyChart.SeriesCollection(i).Name, "stroke", vbTextCompare) > 0 Then
With MyChart.Legend.LegendEntries(i).Format.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid
End With
Else
With MyChart.Legend.LegendEntries(i).Format.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(89, 89, 89)
.Transparency = 0
.Solid
End With
End If
Next i


...dann wird nicht der richtige Legendeneintrag eingefärbt, da SeriesCollection(i) und LegendEntries(i) nicht derselben Datenreihe entsprechen.

Frage:
Wie kann ich zuverlässig den korrekten LegendEntry einer bestimmten Series zuordnen, um diesen dann einzufärben?
Gibt es eine Eigenschaft oder Methode, um von einer Series direkt zum entsprechenden LegendEntry zu gelangen, oder umgekehrt?
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Legendeneintrag nach Text-Kriterium einfärben
08.07.2025 19:36:29
Yal
Hallo Tim,

passt ganz gut, ich habe gerade eine Datei, wo ich SeriesCollection und LegendEntries rumspiele. Ich brauche nur meine laufende Version auf die Seite speichern und dann kann ich deine Spielerei darin basteln.

Scherz beiseite. Deine Frage trifft nicht den 0815-Anwendungfall. Keiner wird irgendwas nachbauen, um den Sachverhalt zu prüfen. Also liefere bitte eine Beispiel-Datei (bereinigt von alles was nicht im Netz gehört!). Da werden sich viele Helfer drauf stürzen (zu viele Beitragenden für zu wenige Fragen :-)

VG
Yal
Anzeige
AW: Legendeneintrag nach Text-Kriterium einfärben
09.07.2025 12:55:23
Tim B.
Hallo Yal,

danke für deinen Input. Ich habe mal versucht eine Beispiel-Datei zu erstellen:

https://www.herber.de/bbs/user/178047.xlsx

In diesem Fall sollte der Legendeneintrag der den Begriff "regen" enthält, rot eingefärbt werden.
Leider habe ich es bei der Beispieldatei nicht geschafft, dass SeriesCollection(i) und LegendEntries(i) nicht derselben Datenreihe entsprechen. Das heißt bei diesem Beispiel sollte mein ursprünglicher Code auch klappen.

Sub einfarben()

Dim mychart As chart

Set mychart = ActiveChart

For i = 1 To mychart.Legend.LegendEntries.Count
If InStr(1, mychart.SeriesCollection(i).Name, "regen", vbTextCompare) > 0 Then
With mychart.Legend.LegendEntries(i).Format.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid
End With
Else
With mychart.Legend.LegendEntries(i).Format.TextFrame2.TextRange.Font.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(89, 89, 89)
.Transparency = 0
.Solid
End With
End If
Next i
End Sub


In diesem Beispiel entsprechen SeriesCollection(3) und LegendEntries(3) den Regentagen.
Wenn jetzt aber SeriesCollection(3) und LegendEntries(2) den Regentagen entsprechen würden, wie könnte ich das dann automatisiert herausfinden, um gezielt den richtigen LegendEntries(i) anzusteuern?

Ich hoffe, ich konnte mein Problem genau genug erklären.

VG
Tim
Anzeige
AW: Legendeneintrag nach Text-Kriterium einfärben
11.07.2025 12:09:30
Tim B.
Hallo,
inzwischen habe ich die Ursache des Problems herausgefunden und auch eine Lösung gefunden. Ich möchte sie hier noch einmal mitteilen, für den Fall, dass jemand mit dem gleichen Problem über diesen Thread stolpert.

Die Ursache für die unterschiedlichen SeriesCollection(i) und LegendEntries(i) liegt darin, dass Datensätze gelöscht werden, während eine Legende eingeblendet ist. Wenn man drei Datensätze hat und den zweiten löscht, wird der dritte Datensatz zum neuen zweiten, aber bei den Legendeneinträgen behält der dritte Eintrag seinen Index. Dies führt dazu, dass SeriesCollection(2) und LegendEntries(3) zusammen gehören. Interessanterweise lässt sich LegendEntries(3) nicht ansprechen, da momentan nur zwei Legendeneinträge existieren. Wenn nun ein neuer Datensatz hinzugefügt wird, erhält dieser SeriesCollection(3) und LegendEntries(2). Die Unordnung lässt sich lösen, indem man die Legende einmal aus- und wieder einblendet. Dabei werden die Legendeneinträge neu und passend sortiert.

Fazit:
Der Inhalt von LegendEntries lässt sich nicht auslesen.
Unpassende SeriesCollection(i)-LegendEntries(i)-Zuordnungen entstehen beim Löschen von Datensätzen bei eingeschalteter Legende.
Um SeriesCollection(i) und LegendEntries(i) wieder passend zu sortieren, muss die Legende einmal aus- und wieder eingeblendet werden.

VG
Tim
Anzeige
Danke für das Teilen der Lösung!
11.07.2025 13:25:32
Yal
... es wird jeder helfen, der durch Google auf diese Frage kommen könnte.

VG
Yal
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