Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1420to1424
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Formattierung aller Diagramme zuweisen

Formattierung aller Diagramme zuweisen
16.04.2015 15:39:29
Frederik
Guten Tag,
ich versuche gerade ein Makro zu schreiben, welche die selbe Formattierung auf alle Diagramme anwendet. Code unten zu sehen; dazu noch eine kleine Erläuterung:
Zuerst werden 2 Diagramme erstellt, welche jeweils auf verschiedene Daten zugreifen.
Danach folgt mein Versuch, die Formattierung auf alle Diagramme (ChartObjects) anzuwenden, um die Formattierung nicht für beide Diagramme einzeln zu schreiben (auch wenn es nur Copy&Paste ist).
Als drittes will ich dann noch ein Makro schreiben, welches die Balken der Diagramme nach dem Wert färbt; z.B. 97 = grün.
Hier der Code:
Sub CreateChart()
Dim CO1 As ChartObject, CH1 As Chart, CO2 As ChartObject, CH2 As Chart, AllC As ChartObjects
'########### Chart 1 (ChartAbove)
Set CO1 = ThisWorkbook.Worksheets("Template").ChartObjects.Add(100, 100, 295, 220)
CO1.Name = "ChartAbove"
' Diagramm [erstellt das Diagramm innerhalb des Diagrammrahmens]
Set CH1 = CO1.Chart
CH1.ChartType = xlColumnStacked
CH1.SetSourceData Worksheets("2014 IT KPIs").Range("C2:O4")
'Title
CH1.HasTitle = True
With CH1.ChartTitle
.Font.Size = 11
.Text = Worksheets("2014 IT KPIs").Cells(3, 2)
End With
'########### Chart 2 (ChartBelow)
Set CO2 = ThisWorkbook.Worksheets("Template").ChartObjects.Add(300, 300, 295, 220)
CO2.Name = "ChartBelow"
' Diagramm [erstellt das Diagramm innerhalb des Diagrammrahmens]
Set CH2 = CO2.Chart
CH2.ChartType = xlColumnStacked
CH2.SetSourceData Worksheets("2014 IT KPIs").Range("C2:O4")
'Title
CH2.HasTitle = True
With CH2.ChartTitle
.Font.Size = 11
.Text = Worksheets("2014 IT KPIs").Cells(3, 2)
End With
'########## Chart Properties
Set AllC = Worksheets("Template").ChartObjects
For Each AllC In Worksheets("Template").ChartObjects
With AllC.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 1
' // Axis title
'.HasTitle = True
'.AxisTitle.Text = "Percent"
End With
Next
For Each AllC In Worksheets("Template").ChartObjects
' Datenreihe Target
With CH1.SeriesCollection(2)
.Type = xlLine
.Border.Color = vbRed
.MarkerStyle = xlMarkerStyleCircle
With CH1.SeriesCollection(2).Points(12)
.HasDataLabel = True
.DataLabel.Position = xlLabelPositionAbove
'.DataLabel.Orientation = 45
End With
End With
Next
End Sub

Ich bekomme den Fehler Type mismatch. ich bin mir ziemlich sicher, dass ich bisher auf dem Holzweg bin, was die Vorgehensweise angeht. Das Internet habe ich schon zuhauf durchforstet, bin aber nie komplett zum Ziel gekommen.
Könnt ihr mir einen Rat geben?
Danke!
Frederik

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formattierung aller Diagramme zuweisen
17.04.2015 10:59:38
fcs
Hallo Frederik,
in deinen For-next-Schleifen arbeitest du die Chart-Objekte ab.
For Each AllC In Worksheets("Template").ChartObjects
Bei der nachfolgenden Formatierung musst du aber auf das zugehörige Chart verweisen. Ähnlich wie oben schon bei der Zuweisung von Diagrammtyp und Datenw´quelle.
In der Summe kommt man aber bei gleichartigen Aktionen für mehrere Objekte klar, wenn man eine separate Sub erstellt, der entsprechende Parameter übergeben werden. In deinem Fall z.B. Chart und Text des Diagrammtitels.
Gruß
Franz
Sub CreateChart()
Dim CO1 As ChartObject, CH1 As Chart, CO2 As ChartObject, CH2 As Chart
'########### Chart 1 (ChartAbove)
Set CO1 = ThisWorkbook.Worksheets("Template").ChartObjects.Add(100, 100, 295, 220)
CO1.Name = "ChartAbove"
' Diagramm [erstellt das Diagramm innerhalb des Diagrammrahmens]
Set CH1 = CO1.Chart
CH1.ChartType = xlColumnStacked
CH1.SetSourceData Worksheets("2014 IT KPIs").Range("C2:O4")
'########### Chart 2 (ChartBelow)
Set CO2 = ThisWorkbook.Worksheets("Template").ChartObjects.Add(300, 300, 295, 220)
CO2.Name = "ChartBelow"
' Diagramm [erstellt das Diagramm innerhalb des Diagrammrahmens]
Set CH2 = CO2.Chart
CH2.ChartType = xlColumnStacked
CH2.SetSourceData Worksheets("2014 IT KPIs").Range("C2:O4")
Call prcFormatChart(objChart:=CH1, strTitel:=Worksheets("2014 IT KPIs").Cells(3, 2))
Call prcFormatChart(objChart:=CH2, strTitel:=Worksheets("2014 IT KPIs").Cells(3, 2))
End Sub
Sub prcFormatChart(objChart As Chart, strTitel As String)
With objChart
'Title
.HasTitle = True
With .ChartTitle
.Font.Size = 11
.Text = strTitel
End With
'Wert-Achse
With .Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 1
' // Axis title
'.HasTitle = True
'.AxisTitle.Text = "Percent"
End With
' Datenreihe Target
With .SeriesCollection(2)
.Type = xlLine
.Border.Color = vbRed
.MarkerStyle = xlMarkerStyleCircle
With .SeriesCollection(2).Points(12)
.HasDataLabel = True
.DataLabel.Position = xlLabelPositionAbove
'.DataLabel.Orientation = 45
End With
End With
End With
End Sub

Anzeige
AW: Formattierung aller Diagramme zuweisen
17.04.2015 12:42:59
Frederik
Hallo Franz,
und danke für deine Hilfe! Funktioniert soweit alles tiptop!
Kannst du mir erklären, warum die anderen Formatierungen nicht auf diesem Wege funktionieren?
-------------
Desweiteren hier noch ein weiteres Makro. Bei diesem will ich anhand der Werte in den angesprochenen Zellen, die Balkenfarbe der Diagramme formatieren.
Der Grundgedanke funktioniert; leider wird erst durch p gesprungen und danach erst i erhöht. Ich würde gerne beide Variablen gleichzeitig um einen erhöhen, damit Wert und Balken stimmen.
Weißt du dazu evtl. auch eine Lösung?
Sub ColorChange()
Dim CO1 As ChartObject, CH1 As Chart, i As Integer, p As Integer
Set CH1 = Worksheets("Template").ChartObjects("ChartAbove").Chart
For i = 4 To 15
For p = 1 To 12
If Worksheets("2014 IT KPIs").Cells(3, i).Value > Worksheets("2014 IT KPIs").Cells( _
4, i).Value Then
CH1.SeriesCollection(1).Points(p).Interior.ColorIndex = 4 'knallgrün
ElseIf Worksheets("2014 IT KPIs").Cells(3, i).Value = Worksheets("2014 IT KPIs") _
.Cells(4, i).Value Then
CH1.SeriesCollection(1).Points(p).Interior.ColorIndex = 44 'orange
ElseIf Worksheets("2014 IT KPIs").Cells(3, i).Value 
Erneut ein Danke!
Frederik

Anzeige
AW: Formattierung aller Diagramme zuweisen
17.04.2015 15:46:09
Frederik
Habe eine Lösung gefunden: Point(i - 3)
Ach wie einfach es doch ist. :)
Nur meine Frage steht noch offen.
Frederik

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige