Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Legendenfarbe ändern VBA

Forumthread: Legendenfarbe ändern VBA

Legendenfarbe ändern VBA
Uli
Hallo
ich möchte bei einem Oberflächendiagramm, der Legende andere Farben zuweisen(RegenbogenMuster aus array). Hab aber folgendes Problem dabei:
Wenn ich beim Legendeneintrag1 anfange bringt er mir einen Laufzeitfehler 1004, wenn ich bei Legendeneintrag höher wie 10 anfange färbt er mir die Werte richtig ein
Wieso kann er nicht bei 1 beginnen?
'-------30 Punkte Legende erstellen--------
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.Legend.Select
With ActiveChart.Axes(xlValue)
.MinimumScale = 70
.MaximumScale = 100
.MinorUnitIsAuto = True
.MajorUnit = 1
'.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
'-----Legende einfärben----------
' Array fuer Farbcode
Dim feld(30) As Variant
feld(1) = 18
feld(2) = 13
feld(3) = 39
feld(4) = 47
feld(5) = 55
feld(6) = 11
feld(7) = 5
feld(8) = 41
feld(9) = 33
feld(10) = 8
feld(11) = 42
feld(12) = 37
feld(13) = 34
feld(14) = 14
feld(15) = 50
feld(16) = 10
feld(17) = 4
feld(18) = 43
feld(19) = 35
feld(20) = 2
feld(21) = 19
feld(22) = 36
feld(23) = 6
feld(24) = 44
feld(25) = 40
feld(26) = 45
feld(27) = 46
feld(28) = 3
feld(29) = 53
feld(30) = 9
ActiveSheet.ChartObjects("Diagramm 1").Activate
i = 1
ActiveSheet.ChartObjects("Diagramm 1").Activate
' For Schleife 30mal ausfuehren zum einfaerben
For u = 1 To 30 Step 1
ActiveChart.Legend.LegendEntries(u).LegendKey.Select
With Selection.Border
.Weight = xlThin
.LineStyle = xlAutomatic
End With
' Farbe i ändern
With Selection.Interior
.ColorIndex = feld(i)
.Pattern = xlSolid
i = i + 1
End With
Next u
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Legendenfarbe ändern VBA
18.03.2010 13:41:31
fcs
Hallo Uli,
bei mir funktioniert dein Code ohne Probleme.
Wo dann bei dir das Problem ist: ?
Ich konnte z.B. aber den Fehler 1004 generieren, nachdem ich manuell einen Wertebereich in der Legende des Diagramm löschte.
Durch komplett neu anlegen der Legende im Makro wurde der Fehler dann vermieden.
Durch Verwendung einer Objekt-Variablen für das Chart kann man jedoch die verschiedenen Activate und Select-Anweisungen vermeiden.
Gruß
Franz
Sub aaTest()
'-------30 Punkte Legende erstellen--------
Dim i As Long, u As Long, oChart As Chart
Application.ScreenUpdating = False
Set oChart = ActiveSheet.ChartObjects("Diagramm 1").Chart
With oChart
.HasLegend = False 'Legende ausblenden
.HasLegend = True 'Legende einblenden
With .Legend
.Position = xlLegendPositionBottom
End With
With .Axes(xlValue)
.MinimumScale = 70
.MaximumScale = 100
.MinorUnitIsAuto = True
.MajorUnit = 1
'.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
End With
'-----Legende einfärben----------
' Array fuer Farbcode
Dim feld(30) As Variant
feld(1) = 18
feld(2) = 13
feld(3) = 39
feld(4) = 47
feld(5) = 55
feld(6) = 11
feld(7) = 5
feld(8) = 41
feld(9) = 33
feld(10) = 8
feld(11) = 42
feld(12) = 37
feld(13) = 34
feld(14) = 14
feld(15) = 50
feld(16) = 10
feld(17) = 4
feld(18) = 43
feld(19) = 35
feld(20) = 2
feld(21) = 19
feld(22) = 36
feld(23) = 6
feld(24) = 44
feld(25) = 40
feld(26) = 45
feld(27) = 46
feld(28) = 3
feld(29) = 53
feld(30) = 9
i = 1
' For Schleife 30mal ausfuehren zum einfaerben
For u = 1 To 30 Step 1
With oChart.Legend.LegendEntries(u).LegendKey
With .Border
.Weight = xlThin
.LineStyle = xlAutomatic
End With
' Farbe i ändern
With .Interior
.ColorIndex = feld(i)
.Pattern = xlSolid
i = i + 1
End With
End With
Next u
Application.ScreenUpdating = True
End Sub

Anzeige
;
Anzeige

Infobox / Tutorial

Legendenfarbe in Excel-Diagrammen mit VBA ändern


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und dein Diagramm: Stelle sicher, dass du ein Oberflächendiagramm hast, das benannt ist (z.B. "Diagramm 1").

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul einfügen: Klicke im Menü auf Einfügen und wähle Modul.

  4. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub LegendenfarbeAendern()
       Dim i As Long, u As Long, oChart As Chart
       Application.ScreenUpdating = False
       Set oChart = ActiveSheet.ChartObjects("Diagramm 1").Chart
       With oChart
           .HasLegend = False 'Legende ausblenden
           .HasLegend = True 'Legende einblenden
           With .Legend
               .Position = xlLegendPositionBottom
           End With
           With .Axes(xlValue)
               .MinimumScale = 70
               .MaximumScale = 100
               .MinorUnitIsAuto = True
               .MajorUnit = 1
               .ReversePlotOrder = False
               .ScaleType = xlLinear
               .DisplayUnit = xlNone
           End With
       End With
    
       ' Array für Farbcode
       Dim feld(30) As Variant
       ' Füge hier deine Farbzuweisungen hinzu
       feld(1) = 18
       ' ... weitere Zuweisungen ...
       feld(30) = 9
       i = 1
    
       ' For Schleife 30mal ausführen zum einfärben
       For u = 1 To 30 Step 1
           With oChart.Legend.LegendEntries(u).LegendKey
               With .Border
                   .Weight = xlThin
                   .LineStyle = xlAutomatic
               End With
               ' Farbe i ändern
               With .Interior
                   .ColorIndex = feld(i)
                   .Pattern = xlSolid
                   i = i + 1
               End With
           End With
       Next u
       Application.ScreenUpdating = True
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle LegendenfarbeAendern und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 1004: Dieser Fehler kann auftreten, wenn die Legende nicht korrekt initialisiert ist. Stelle sicher, dass das Diagramm existiert und die Legende sichtbar ist. Du kannst auch versuchen, die Legende im Makro neu zu erstellen, wie im Beispiel gezeigt.

  • Legendenfarbe wird nicht geändert: Überprüfe den Farbcode im Array. Stelle sicher, dass die Indizes korrekt sind und der Array nicht außerhalb der Grenzen angesprochen wird.


Alternative Methoden

Eine alternative Methode zur Anpassung der Legendenfarbe besteht darin, die Formatierung über die Excel-Oberfläche anstatt über VBA vorzunehmen. Du kannst die Legende manuell auswählen und die Farben über das Menü "Format" ändern.


Praktische Beispiele

Hier ist ein Beispiel, wie du ein Diagramm mit einer benutzerdefinierten Legendenfarbe erstellen kannst:

  1. Erstelle ein einfaches Diagramm mit Daten.
  2. Füge den VBA-Code ein und passe die Farbwerte im Array an, um verschiedene Farben zu testen.
  3. Führe das Makro aus und beobachte, wie sich die Legende aktualisiert.

Tipps für Profis

  • Objektvariablen verwenden: Wie im Beitrag von Franz erwähnt, kannst du Objektvariablen verwenden, um die Activate und Select Anweisungen zu vermeiden. Das verbessert die Lesbarkeit und Performance deines Codes.

  • Farben dynamisch zuweisen: Du kannst die Farben dynamisch anhand von Datenwerten oder Bedingungen zuweisen, um noch flexiblere Diagramme zu erstellen.


FAQ: Häufige Fragen

1. Warum funktioniert mein VBA-Code nicht? Vergewissere dich, dass das Diagramm korrekt benannt ist und dass du die richtigen Farbwerte im Array verwendest.

2. Wie ändere ich die Legendenfarbe für andere Diagrammtypen? Der Code kann auch für andere Diagrammtypen verwendet werden, solange die Struktur des Diagramms die Legende unterstützt.

3. Welche Excel-Version benötige ich? Der bereitgestellte VBA-Code funktioniert in Excel 2010 und höher. Achte darauf, dass du die richtigen Referenzen in deinem VBA-Projekt gesetzt hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige