Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
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

Formatierung des Pivot-Diagramm mit Makro crashed

Formatierung des Pivot-Diagramm mit Makro crashed
17.03.2014 17:58:26
Markus
Hallo zusammen,
ich werte BW-Queries aus, indem ich ein Pivotdiagramm nutze.
Leider verhaut es mir ständig die Formatierung des Diagramms.
Daher bin ich nach etwas regergieren darauf gekommen, dass man die Formatierung am Besten per Makro steuert.
Das Makro löse ich mit folgendem Befehl aus:
 Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call formatierung
End Sub

Das eigentliche Makro habe ich mir aufgezeichnet:
Sub formatierung()
' formatierung Makro
On Error Resume Next
ActiveSheet.ChartObjects("Diagramm 6").Activate
ActiveChart.SeriesCollection(2).Select
ActiveChart.SeriesCollection(2).ChartType = xlLine
ActiveChart.SeriesCollection(4).Select
ActiveChart.SeriesCollection(4).ChartType = xlLine
ActiveChart.SeriesCollection(6).Select
ActiveChart.SeriesCollection(6).ChartType = xlLine
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(4).Select
ActiveChart.SeriesCollection(4).ChartType = xlLine
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.SeriesCollection(6).Select
ActiveChart.SeriesCollection(6).ChartType = xlLine
ActiveChart.SeriesCollection(4).Select
ActiveChart.SeriesCollection(4).ChartType = xlLine
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.SeriesCollection(2).Select
ActiveChart.SeriesCollection(2).ChartType = xlLine
End Sub

In der Regel kann ich ein paar Mal einige Elemente ein und ausblenden, aber irgendwann stürzt das ganze Excel komplett ab. Hat irgendjemand eine Ahnung an was das liegen kann?
Seit das Makro hinterlegt ist, ist Excel auch extrem langsam geworden.
Klar, das Makro wird jedes mal ausgeführt wenn am Diagramm was geändert wird, aber die komplette Datei ist gerade mal 630kB groß.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formatierung des Pivot-Diagramm mit Makro crashed
18.03.2014 16:13:55
fcs
Hallo Markus,
statt Excel einfach per Makro in alle möglichen Fehler laufen zu lassen, in der Hoffnung dass Resume Next weiterhilft, ist es evtl. besser Excel bei Fehlern gezielt zur nnächsten Aktion zu steuern.
Nachfolgend mein Vorschlag für dein Makro, wobei die zu Linien umgewandelten Datenreihen noch gezielt formatiert werden.
Gruß
Franz
Sub formatierung()
' formatierung Makro
Dim objChart As Chart, AnzahlReihen As Integer
On Error GoTo Fehler
AnzahlReihen = -1
Set objChart = ActiveSheet.ChartObjects("Diagramm 6").Chart
With objChart
AnzahlReihen = .SeriesCollection.Count
If AnzahlReihen >= 2 Then Call prcFormatSerie(.SeriesCollection(2), RGB(255, 0, 0))
If AnzahlReihen >= 4 Then Call prcFormatSerie(.SeriesCollection(4), RGB(0, 255, 0))
If AnzahlReihen >= 6 Then Call prcFormatSerie(.SeriesCollection(6), RGB(0, 0, 255))
End With
Resume01:
AnzahlReihen = -2
Set objChart = ActiveSheet.ChartObjects("Diagramm 1").Chart
With objChart
AnzahlReihen = .SeriesCollection.Count
If AnzahlReihen >= 2 Then Call prcFormatSerie(.SeriesCollection(2), RGB(255, 0, 0))
If AnzahlReihen >= 4 Then Call prcFormatSerie(.SeriesCollection(4), RGB(0, 255, 0))
If AnzahlReihen >= 6 Then Call prcFormatSerie(.SeriesCollection(6), RGB(0, 0, 255))
End With
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case -2147024809 'Chartobjekt gibt es nicht
Select Case AnzahlReihen
Case -1: Resume Resume01
Case -2: Resume Fehler
End Select
Case 438
Select Case AnzahlReihen
Case -1: Resume Resume01
Case -2: Resume Fehler
End Select
Case 1004 'SeriesCollection existiert nicht
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub
Sub prcFormatSerie(objSerie As Series, FarbeRGB As Long)
'Datenreihe in Liniendiagramm umsetzen und Formatieren
With objSerie
.ChartType = xlLine
.ClearFormats
.MarkerBackgroundColor = 0 'FarbeRGB 'RGB(255, 255, 255)
.MarkerForegroundColor = FarbeRGB
.MarkerSize = 6
With .Format.Line
.Visible = msoTrue 'msoFalse
.ForeColor.RGB = FarbeRGB
.BackColor.RGB = 0 'RGB(255, 255, 255)
.Transparency = 0
.Weight = 2.5
End With
End With
End Sub

Anzeige
AW: Formatierung des Pivot-Diagramm mit Makro crashed
19.03.2014 14:57:44
Markus
Hallo Franz,
vielen Dank für deine Rückmeldung. Das Makro läuft jetzt sehr stabil.
Leider ist die Farbe jetzt so, dass es die je nach ein oder ausgeblendetes Bezugsfeld nicht immer gleich ist.
Z.B. habe ich 4 Bereiche, wenn ich nun den 2. Bereich ausblende, übernimmt der 3. Bereich die Farbe vom ehemals 2.Bereich.
Ist das verständlich ausgedrück!?
Wie kann ich die Farben fest zuordnen?
Kannst du mir noch einen Tipp geben, wie ich die Linie formatieren kann? Also dass sie z.B. gestrichelt ist und dass die Datenpunkte anders aussehen oder ggf. ausgeblendet sind?
Vielen Dank im Voraus.
Gruß Markus

Anzeige
AW: Formatierung des Pivot-Diagramm mit Makro crashed
20.03.2014 12:24:33
fcs
Hallo Markus,
das Grundgerüst für das Formatieren der Linien ist ja schon angelegt in
"prcFormatSerie(objSerie As Series, FarbeRGB As Long)
Momentan kann aber nur die Farbe und die Breite der Linie angepasst werden. Dieses Makro muss entsprechend erweitert werden, um andere Formate der Datenreihe per Makro einstellen zu können.
Das ist recht mühselig zu programmieren wegen der Vielzahl an Formatierungsmöglichkeiten in Diagrammen.
Wie kann ich die Farben den Bereichen fest zuordnen?
Wenn den Bereichen feste Farben zugeordnet werden sollen, unabhängig davon welche Bereiche ein-/ausgeblendet sind, dann kann man das über die Namen der Datenreihen steuern. Die Namen entsprechen dann meist den Texten, die in der Legende angezeigt werden.
Hier wäre es jetzt extrem hilfreich, wenn du eine Beispieldatei mit ggf. anonymisierten Daten hier hochladen würdest. Die Datenmenge für den Pivotbericht kannst du soweit reduzieren, das für jeden Bereich ein paar Datenpunkte angezeigt werden.
Ich komme aber frühestens heute Abend dazu hier weitere Details auszuarbeiten.
Gruß
Franz

Anzeige
AW: Formatierung des Pivot-Diagramm mit Makro crashed
21.03.2014 13:15:30
Markus
Hallo Franz,
zunächst einmal vielen Dank, dass du dir die Mühe machst und mir hier hilfst!
Meinde Datei (anonymisierte) findest du hier: https://www.herber.de/bbs/user/89776.xlsm
Mir ist aufgefallen, dass es bei den Pivot-Diagrammen lediglich das Diagrammformat (Linie, Balken etc.) standardmäßig immer auf Balken zurück setzt. Wenn ich aber bei meinem ersten Versuch eine Farbe und Form der Linie eingestellt hatte, hat es die auch behalten. Ist das nur bei mir so oder wäre das immer so?
Wenn ja, dann warum nicht "keep it simple" und wir formatiern nur das Diagrammformat?
Leider liegt das alles außerhalb meines Kentnissstands, daher bin ich auf Hilfe angewiesen.
Was meinst du Franz, wäre das eine option? Vielleicht nicht ganz sauber, aber es würde den Programmieraufwand gering halten.
P.S. mach dir keinen Stress wegen der Zeit, ich bin jetzt eh mal eine Woche außer landes und kann nichts weiter bearbeiten.
Vielen Dank schonmal im Voraus
Gruß Markus

Anzeige
AW: Formatierung des Pivot-Diagramm mit Makro crashed
23.03.2014 01:30:24
fcs
Hallo Markus,
ich hab jetzt mal unter Excel 2010 getestet.
Es scheint zu funktionieren, dass man "einfach" für die Reihen mit den Indexnummern 2,4,6 und 8
den Diagrammtyp entsprechend setzt.
Gruß
Franz
Das Makro vereinfacht sich dann zu:
Sub formatierung()
' formatierung Makro
Dim objChart As Chart, AnzahlReihen As Integer, intReihe As Integer
On Error GoTo Fehler
AnzahlReihen = -1
Set objChart = ActiveSheet.ChartObjects("Diagramm 6").Chart
With objChart
AnzahlReihen = .SeriesCollection.Count
For intReihe = 1 To AnzahlReihen
Select Case intReihe
Case 1, 3, 5
'.SeriesCollection(intReihe).ChartType = xlColumnClustered
Case 2, 4, 6
.SeriesCollection(intReihe).ChartType = xlLineMarkers
End Select
Next
End With
Resume01:
AnzahlReihen = -2
Set objChart = ActiveSheet.ChartObjects("Diagramm 1").Chart
With objChart
AnzahlReihen = .SeriesCollection.Count
For intReihe = 1 To AnzahlReihen
Select Case intReihe
Case 1, 3, 5, 7
'.SeriesCollection(intReihe).ChartType = xlColumnClustered
Case 2, 4, 6, 8
.SeriesCollection(intReihe).ChartType = xlLineMarkers
End Select
Next
End With
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case -2147024809 'Chartobjekt gibt es nicht
Select Case AnzahlReihen
Case -1: Resume Resume01
Case -2: Resume Fehler
End Select
Case 438
Select Case AnzahlReihen
Case -1: Resume Resume01
Case -2: Resume Fehler
End Select
Case 1004 'SeriesCollection existiert nicht
Resume Next
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige