AW: Diagramme: Chartgroups in Vordergrund verschieben
16.08.2009 11:52:50
fcs
Hallo Uli,
das war jetzt eine Nuss der härteren Art.
Die PlotOrder läßt sich unter VBA wohl tatsächlich nur innerhalb einer Diagramm-Gruppe neu festlegen. Die Gruppen selber haben wohl keine PlotOrder-Eigenschaft, die angepasst werden kann.
Als Notlösung hab ich dann die Anpassung der Formeln der Datenreihen gefunden.
Gruß
Franz
'Erstellt mit Excel 2007 im Kompatibilitäts-Modus
Option Explicit
Private intReihenfolge As Integer, arrSeries()
Sub ChartGroupOrder()
Dim Diag As Chart, intI As Integer, objReihe As Series
For Each Diag In ActiveWorkbook.Charts
ReDim arrSeries(1 To Diag.SeriesCollection.Count, 1 To 2)
intReihenfolge = 0 'Zähler für Reihenfolge zurücksetzen
'Die folgenden 4 Zeilen entsprechend der gewünschten Reihenfolge der Gruppen _
anordnen
Call ReadGroupSeries(objChartGroups:=Diag.LineGroups) 'Linien-Reihen
Call ReadGroupSeries(objChartGroups:=Diag.XYGroups) 'XY-Punkt-Reihen
Call ReadGroupSeries(objChartGroups:=Diag.AreaGroups) 'Flächen-Reihen
Call ReadGroupSeries(objChartGroups:=Diag.ColumnGroups) 'Säulen-Reihen
'Formeln der Datenreihen entsprechend der neuen Reihenfolge anpassen
For intI = 1 To intReihenfolge
Set objReihe = Diag.SeriesCollection(arrSeries(intI, 1))
objReihe.Formula = Left(objReihe.Formula, InStrRev(objReihe.Formula, ",")) _
& arrSeries(intI, 2) & ")"
Next
Next
End Sub
Sub ReadGroupSeries(objChartGroups As ChartGroups)
'Namen der Datenreihen der Diagrammgruppe auslesen _
und Name und Reihenfolge in Array schreiben
Dim objReihe As Series, objChartGroup As ChartGroup
For Each objChartGroup In objChartGroups
For Each objReihe In objChartGroup.SeriesCollection
intReihenfolge = intReihenfolge + 1
arrSeries(intReihenfolge, 1) = objReihe.Name
arrSeries(intReihenfolge, 2) = intReihenfolge
Next
Next
End Sub