VBA Diagramm Farben
#1
Hallo zusammen,

ich möchte per VBA die Balkenfarben meines Diagramms verändern. Dieses ist mir auch erfolgreich mit folgendem Code gelungen:


Sub farbe()
With ActiveSheet.ChartObjects("Diagramm 1").Chart.SeriesCollection(1)
  With .Border
    .Weight = xlThin
    .LineStyle = xlAutomatic
  End With
  With .Interior
    .Color = RGB(125, 0, 0)
    .Pattern = xlSolid
  End With
End With
With ActiveSheet.ChartObjects("Diagramm 1").Chart.SeriesCollection(2)
  With .Border
    .Weight = xlThin
    .LineStyle = xlAutomatic
  End With
  With .Interior
    .Color = RGB(255, 0, 255)
    .Pattern = xlSolid
  End With
End With
With ActiveSheet.ChartObjects("Diagramm 1").Chart.SeriesCollection(3)
  With .Border
    .Weight = xlThin
    .LineStyle = xlAutomatic
  End With
  With .Interior
    .Color = RGB(0, 60, 255)
    .Pattern = xlSolid
  End With
End With
End Sub

Nun folgendes Problem:

Dieser Code gilt so für 3 verschiedene Datensätze (Balken) mit 3 verschiedenen Farben und funktioniert auch super, wenn es immer um genau 3 Datensätze geht.

Hat das Diagramm aber nur 2 Datensätze erscheint ein VBA Fehler. Der Code möchte einem Balken, der nicht existiert, eine Farbe zuordnen.

Jemand ne Idee wie man das Problem umgehen kann?
Top
#2
Hallo B...,

ermittle am Anfang  mit "SeriesCollection.Count" die Anzahl der Datenreihen und prüfe vor jeder Farbzuweisung ob die Datenreihe vorhanden ist.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Brodiak
Top
#3
(08.03.2018, 15:35)Ego schrieb: Hallo B...,

ermittle am Anfang  mit "SeriesCollection.Count" die Anzahl der Datenreihen und prüfe vor jeder Farbzuweisung ob die Datenreihe vorhanden ist.

Hi Helmut,

danke erstmal...

Bin in VBA nicht sehr fit.. kannst mir da vielleicht genauer sagen was ich genau zu tun habe.. also den kompletten Code aufschreiben? Wüsste jetzt nicht wie ich prüfen sollte ob die Datenreihe vorhanden ist... Huh
Top
#4
Hallo B...,

bitte sehr:
Code:
Option Explicit
Sub farbe()
Dim intPos As Integer
With ActiveSheet.ChartObjects("Diagramm 1").Chart
  For intPos = 1 To .SeriesCollection.Count
    With .SeriesCollection(intPos)
      With .Border
        .Weight = xlThin
        .LineStyle = xlAutomatic
      End With
      With .Interior
        Select Case intPos
        Case 1
          .Color = RGB(125, 0, 0)
        Case 2
          .Color = RGB(255, 0, 255)
        Case Else
          .Color = RGB(0, 60, 255)
        End Select
        .Pattern = xlSolid
      End With
    End With
  Next intPos
End With
End Sub
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Brodiak
Top
#5
(09.03.2018, 12:09)Ego schrieb: Hallo B...,

bitte sehr:

   
WOW,

vielen Dank! Funktioniert direkt auf Anhieb!!! :18: :18: :18:
Top
#6
Hi,

das heißt aber, daß bei mehr als 3 SeriesCollection im Diagramm die mit Nummer 3 bis Ende alle die gleiche Farbe bekommen!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste