Excel – Diagrammfarben per VBA zuweisen

Den Datenreihen meines Diagramms möchte ich feste Farbwerte zuweisen. Die gleiche Stadt soll im Diagramm immer die gleiche Farbe zugewiesen bekommen.

Wie das Makro funktioniert, sehen Sie hier:

Videolink: http://youtu.be/_1ue9imc4yc

VBA-Code:
Sub Farben_Diagramm()

Dim chtDiagramm As Chart
Dim i As Integer, j As Integer, intColor As Integer, intSeries As Integer
Dim strName As String, strChart As String, strBlatt As String
On Error GoTo ErrorHandler
    strBlatt = „Versuch“
    strChart = „chartPersonal“

    Set chtDiagramm = Sheets(strBlatt).ChartObjects(strChart).Chart
    intSeries = chtDiagramm.SeriesCollection.Count

    chtDiagramm.SetElement (msoElementDataLabelNone)
    chtDiagramm.SetElement (msoElementDataLabelCenter)

    For i = 1 To intSeries
        strName = chtDiagramm.SeriesCollection(i).Name
        For j = 2 To Range(„rng_Orte“).Value + 1
            If Sheets(„Versuch“).Cells(j, 9).Value = strName Then
                intColor = Sheets(„Versuch“).Cells(j, 14).Value
                With chtDiagramm.SeriesCollection(strName)
                    .Format.Fill.Visible = msoTrue
                    .Format.Fill.ForeColor.RGB = RGB(Sheets(„Versuch“).Cells(j, 11).Value, _
                        Sheets(„Versuch“).Cells(j, 12).Value, Sheets(„Versuch“).Cells(j, 13).Value)
                       
                    With .DataLabels.Format.TextFrame2.TextRange.Font.Fill
                        .ForeColor.RGB = RGB(intColor, intColor, intColor)
                        .Solid
                    End With
                    .DataLabels.Format.TextFrame2.TextRange.Font.Bold = msoTrue
                End With
               
            End If
        Next j
    Next i
   
    Exit Sub
   
ErrorHandler:
    MsgBox „Ein Fehler ist aufgetreten“, vbInformation, „Fehler “ & Err.Number
End Sub

Wie kommt man auf so einen Code? Ich habe mir die Makroaufzeichnung zu Nutze gemacht:

Videolink: http://youtu.be/iHae8Su6GGo

Hier wird der Code von oben erläutert:

Videolink: http://youtu.be/Yrl7-PZiMjg

16 Kommentare

  1. Johannes

    Vielen Dank für die Videos 🙂 Ich habe eine kleines Problem bei dem obigen Code.. Es gibt zwei Fehlerarten, die immer auftreten. Zum Einen mag er den Befehl: MsgBox “Ein Fehler ist aufgetreten”, vbInformation, “Fehler ” & Err.Number nicht so ganz, da es in roter Schriftfarbe angezeigt wird und die mit der Meldung kommt, dass es einen Fehler beim Kompilieren gegeben hätte. (Das Wort Fehler „Ein FEHLER [..]“ wir dann zusätzlich markiert). Zum Anderen tritt ein Laufzeitfehler 1004 bei …Range(“rng_Orte”).Value + 1… auf (Objekt…Range.. _Global ist fehlgeschlagen!). Habe ich bei den Videos irgendwas übersehen? LG Johannes

      • Andi

        Lieber Theho, könntest du ggf. bitte mal deine Datei zur Verfügung stellen bzw. irgendwo hochladen. Sowohl in Excel 2007 also auch in 2013 komme ich mit deiner verwendeten Syntax nicht weiter. Dein Error Handler erzeugt das erste Problem und dann stört sich der Compiler am Set chtDiagramm = Sheets(strBlatt).ChartObjects(strChart).Chart , obwohl der Sheetname „Versuch“ lautet und das Chart entsprechend benannt wurde.

        Im Übrigen danke ich dir sehr für deine Arbeit und dein vermitteltes Wissen! Respekt!

  2. Lara

    Hallo,
    danke für das Video!

    Ich habe den Fall, dass die ‚Städte‘ mehrfach auftreten.
    Alle Diagrammabschnitte einer ‚Stadt‘ sollen die gleiche Farbe bekommen.
    Bei dem dargestellten Code wird allerdings nur die 1. Datenreihe der jeweiligen Stadt gefärbt.
    Was müsste am Code geändert werden, dass jeder Datenreihe die passende Farbe zugewiesen wird? Vielen Dank. VG Lara

    • thehosblog

      Hallo Lara,
      bei mir werden mehrfach auftauchende Städte identisch eingefärbt, also nicht nur der erste Treffer.

      • Lara

        Wenn ich das Programm manuell durchlaufe, funktioniert es auch. Allerdings nicht, wenn ich es automatisch laufen lasse.
        Ich weiß nicht, wo der Fehler liegen könnte.

  3. Lara

    Wenn ich das Programm manuell durchlaufe, funktioniert es auch. Allerdings nicht, wenn ich es automatisch laufen lasse.
    Ich weiß nicht, wo der Fehler liegen könnte.

  4. Neda

    Hallo,
    danke für das super tolle Video!!!! Der Code funktioniert mit allen Diagrammarten, aber nicht mit dem Kreisdiagramm, da bei Legendeneiträge(Reihe) z.B. nur eine Datenreihe ist und bei der Horizontalen Achsenbeschriftung z.B. Bochum, Bonn, Dresden. Ich denke, dass das etwas mit
    Set chtDiagramm = Sheets(strBlatt).ChartObjects(strChart).Chart
    intSeries = chtDiagramm.SeriesCollection.Count
    zu tun hat? Wie kann ich das Problem lösen?

  5. Bärbel

    Super Tool und super Erklärung, so dass ich als „Anfänger“ auch gut damit klar komme. Vielen Dank.
    Ich habe allerdings ein Problem, dass ich nicht geknackt bekomme. Mein Diagramm wird aus einer flexiblen Tabelle erstellt, die sich nur mit den Top 5 – Orten aus einer größeren Tabelle füllt. Wenn ich die Ortsnamen fest eingebe funktioniert das prima, da ich aber die Top 5 einlese mache ich das über eine Formel. Diese Orte scheint der Code nicht zu erkennen – zumindest funktioniert es dann nicht. Was muss ich machen, damit VBA das Formelergebnis als „Ort“ erkennt?

  6. Kah Seng

    Genau das was ich haben will. Super!

    Allerdings kriege ich immer wieder den Fehler: Index außerhalb des gültigen Bereichs..

    Habe den Namen der Tabelle und der Datei angepasst an die im Makro angegeben Namen.

    Was kann ich tun?

  7. sascha

    Hey, vielen Dank für die Beschreibung des Codes. Ich habe nur sehr wenig VBA Erfahrung, deswegen fällt es mir schwer deinen Code auf meine xls anzpassen. Vielleicht kannst du mir ja helfen.
    Die Ausgangslage ist folgende:

    Im Tabellenblatt „Auswertung“ befindet sich ein Diagramm sowie 4 Zellen mit Dropdownlisten, mit denen ich auswähle welche Datenreihen im Diagramm dargestellt werden sollen. Im Tabellenblatt „Auswertung-Daten“ befinden sich die Daten, auf die sich das Diagramm bezieht. Zusätzlich habe ich eine Tabelle mit den Datenreihennamen und den dazugehörigen RGB-Farb-Werten.
    Wenn sich nun die ausgewählten Datenreihen ändern, soll sich auch die Farbe der Datenreihe entsprechend anpassen.

    Vielen Dank für deine Unterstützung!

    Sascha

    • thehosblog

      Hallo, leider schaffe ich es hier nicht, private Anfragen zu beantworten. Am besten wählst Du eines der bekannten Excel-Foren. Merci und viel Erfolg, Andreas

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s