AW: Diagrammerweiterung
08.12.2014 11:28:24
Beverly
Hi Norbert,
1. du solltest dir dein erstes Diagramme einmal genauer ansehen: da gibt es eine Datenreihe mit Bezug #REF! - deshalb steigt der Code bei dieser Datenreihe aus! Ändere den Bezug und der Code läuft durch
2. deine Diagramme sind anders aufgebaut als in der anderen Tabelle: sie haben bei den X-Werte den Bezug zu Tabelle "Vergleich VP" und nicht - wie die anderen Diagramme - zur aktuellen Tabelle. Folglich wird die letzte belegte Spalte falsch ermittelt, da ja im Code von der aktiven Tabelle ausgegangen wird und den Diagrammen somit logischerweise ein falscher Wertebereich zugewiesen wird - nur Spalte A:B und nicht bis zur letzten belegten Spalte in Zeile 6 der Tabelle "Vergleich VP". Es muss im Code also berücksichtigt werden, dass die letzte belegte Spalte in "Vergleich VP" und nicht in der aktuellen ermittelt wird - das änderdt den Code natürlich:
Sub WertebereichVerschieben()
Dim lngReihe As Long
Dim strXWerte As String
Dim strYWerte As String
Dim strStart As String
Dim intEnde As Integer
Dim chrDia As ChartObject
Dim strTabelleX As String
Dim strTabelleY As String
For Each chrDia In ActiveSheet.ChartObjects
With chrDia.Chart
strXWerte = Split(.SeriesCollection(1).Formula, ",")(1)
strTabelleX = Range(strXWerte).Parent.Name
lngReihe = Range(strXWerte).Rows(3).Row
intEnde = IIf(IsEmpty(Worksheets(strTabelleX).Cells(6, Worksheets(strTabelleX). _
Columns.Count)), _
Worksheets(strTabelleX).Cells(6, Worksheets(strTabelleX).Columns.Count).End( _
xlToLeft).Column, Columns.Count)
strStart = Range(strXWerte).Cells(1).Address
strXWerte = "'" & strTabelleX & "'!" & Cells(Range(strXWerte).Rows(1).Row, 2). _
Address & _
":" & Cells(Range(strXWerte).Rows(3).Row, intEnde).Address
.SeriesCollection(1).XValues = Range(strXWerte)
For lngReihe = 1 To .SeriesCollection.Count
strYWerte = Split(.SeriesCollection(lngReihe).Formula, ",")(2)
strTabelleY = Range(strYWerte).Parent.Name
strYWerte = "'" & strTabelleY & "'!" & Cells(Range(strYWerte).Row, 2).Address & _
":" _
& Cells(Range(strYWerte).Row, intEnde).Address
.SeriesCollection(lngReihe).Values = Range(strYWerte)
Next lngReihe
End With
Next chrDia
End Sub
Beachte also künfitig bitte, dass ein Code immer nur für die Bedingungen geschrieben werden kann, wie sie im gegebenen Augenblick vorgelegen haben. Sobald man als Fragesteller jedoch diese Bedingungen ändert, darf man nicht unbedingt davon ausgehen, dass mit demselben Code auch die veränderten Bedingungen berücksichtigt werden können.
3. unterhalb deines letzten Diagramms gibt es ganz am linken Rand "unsichtbar" noch ein weiteres Diagramm - das löst ebenfalls einen Fehler aus, da dort Datenreihen mit #Ref!-Bezügen enthalten sind.