Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

auf ausgeblendete Datenreihe eines Diagramms per VBA zugreifen

365 views
Skip to first unread message

Werner News

unread,
Feb 17, 2008, 7:35:15 AM2/17/08
to
Hallo,

ich möchte Datenreihen in einem Diagramm per VBA formatieren. Dafür
durchlaufe ich eine 'for each-Schleife'. Auf dem Tabellenblatt sind die
Daten in Zeilen angeordnet. Einige Zeilen sind ausgeblendet, wodurch
die zugehörigen Datenreihen auch im Diagramm nicht angezeigt werden.
Bei der ersten ausgeblendeten Datenreihe stoppt der folgende Code mit:
'Laufzeitfehler 1004: Die Name-Eigenschaft des Series Objektes kann
nicht zugeordnet werden'.

For Each S In ActiveChart.SeriesCollection
'On Error Resume Next
S.MarkerSize = 10
Debug.Print S.Name, S.Formula
Next

Obwohl die Datenreihe nicht angezeigt wird, ist sie in der
SeriesCollection. Der Zugriff auf ihre Eigenschaften ist jedoch nicht
möglich. Mit einer Fehlerbehandlung wie 'On Error Resume Next' kann die
Schleife vollständig durchlaufen werden. Wie lässt sich (ohne dass ein
Fehler auftritt) feststellen, dass eine Datenreihe nicht angezeigt
wird, weil der Datenbereich auf dem Tabellenblatt ausgeblendet ist?

Werner

Beverly

unread,
Feb 18, 2008, 11:58:02 AM2/18/08
to
Hi Werner,

die einzige Möglichkeit, die mir einfällt: lies aus der Datenreihenformel
die Spalte (bzw. Zeile) aus und schau im Tabellenblatt nach, ob sie
ausgeblendet ist.

Bis später,
Karin
http://beverly.excelhost.de/

Werner News

unread,
Feb 19, 2008, 6:08:43 AM2/19/08
to
Hallo Karin,

vielen Dankf für deine Antwort. Leider tritt der Fehler aber auch beim
Zugriff auf die Formel auf.

For Each S In ActiveChart.SeriesCollection

Debug.Print S.Name, S.Formula 'Laufzeitfehler 1004
Next

Werner

"Beverly" <Bev...@discussions.microsoft.com> schrieb:

> die einzige Möglichkeit, die mir einfällt: lies aus der Datenreihenformel

> die Spalte (bzw. Zeile) aus [...]

Werner News

unread,
Feb 20, 2008, 3:18:31 AM2/20/08
to
Oh,

ich habe den Fehler nicht richtig erkannt, dadurch falsch beschrieben
und muss nun korrigieren:

Datenreihen, die nicht angezeigt werden, weil der zugehörige
Datenbereich ausgeblendet ist, werden bei der for-each-Schleife einfach
ausgelassen. Der 'Laufzeitfehler 1004: Die Name-Eigenschaft des Series
Objektes kann nicht zugeordnet werden' tritt auf, wenn der zugehörige
Datenbereich auf dem Tabellenblatt __leer__ ist (auch wenn alle Zellen
des Datenbereichs #nv enthalten). Für die Datenreihe muss mindestens
ein Punkt definiert sein, damit per VBA auf ihre Eigenschaften (auch
die Formel) zugegriffen werden kann. Es genügt nicht, dass der Name der
Datenreihe definiert ist.

Hintergund: Ich erstelle dynamische Diagramme, die indirekt auf
Pivottabellen basieren. PivotCharts nutze ich nicht, weil diese bei
anderer Auswahl ihre Formatierungen verlieren. Die Daten der
Pivottabellen gebe ich zunächst in einem Bereich des Tabellenblattes
wieder. Dieser Bereich ist der Datenbereich für die Diagramme. Die
Größe des Bereichs richtet sich nach der maximal möglichen Anzahl der
Datenreihen; diese wird nur bei bestimmter Auswahl mit der Pivottabelle
erreicht. Meist ist die Pivottabelle kleiner als der Datenbereich, so
dass Teile des Datenbereichs leer bleiben. Die leeren Zeilen des
Datenbereichs blende ich meist aus, damit keine unnötigen
Legendensymbole angezeigt werden.

Die Frage ist also: Wie lässt sich (ohne dass ein Fehler auftritt)

feststellen, dass eine Datenreihe nicht angezeigt

wird, weil der Datenbereich auf dem Tabellenblatt leer ist?

Werner

"Werner News" <werne...@nospam.arcornews.de> schrieb:
> ...

Beverly

unread,
Feb 20, 2008, 10:53:01 AM2/20/08
to
Hi Werner,

wenn generell alle Y-Werte leer (oder #NV) sind, dann kannst du auf diese
Weise prüfen, ob der erste Y-Wert der Datenreihe belegt ist

Sub werte_vorhanden_pruefen()
Dim chDiagramm As Chart
Dim inReihe As Integer
Dim arrY_Werte() As Variant
Set chDiagramm = ActiveSheet.ChartObjects(1).Chart
With chDiagramm
For inReihe = 1 To .SeriesCollection.Count
arrY_Werte() = chDiagramm.SeriesCollection(inReihe).Values
If arrY_Werte(1) = "" Then MsgBox "Kein Wert vorhanden"
Next inReihe
End With
End Sub

Falls auch Datenreihen vorkommen, bei denen der 1. Y-Wert leer sein kann,
die anderen aber gefüllt sind, dann musst du halt in einer Schleife über das
gesamte Array laufen und schauen, ob alle Werte leer sind.

Werner News

unread,
Feb 22, 2008, 4:12:20 AM2/22/08
to
Hallo Karin,

wenn wirklich alle Y-Werte leer sind, stoppt der Code bei mir (XL2003)
beim Zugriff auf die Eigenschaft Values ebenso wie auf Name und andere.

Werner

"Beverly" schrieb:

> wenn generell alle Y-Werte leer (oder #NV) sind, dann kannst du auf diese
> Weise prüfen, ob der erste Y-Wert der Datenreihe belegt ist
>

> [...]


> Set chDiagramm = ActiveSheet.ChartObjects(1).Chart
> With chDiagramm
> For inReihe = 1 To .SeriesCollection.Count
> arrY_Werte() = chDiagramm.SeriesCollection(inReihe).Values

dabei Abbruch mit Laufzeitfehler 1004

Beverly

unread,
Feb 22, 2008, 12:14:05 PM2/22/08
to
Hi Werner,

offensichtlich gibt es doch keine Möglichkeit, ohne On Error auszukommen.
Ich würde es dann z.b. mit diesem Code machen

Sub werte_vorhanden_pruefen2()


Dim chDiagramm As Chart
Dim inReihe As Integer
Dim arrY_Werte() As Variant

Dim boZustand As Boolean


Set chDiagramm = ActiveSheet.ChartObjects(1).Chart
With chDiagramm
For inReihe = 1 To .SeriesCollection.Count

On Error Resume Next
arrY_Werte() = chDiagramm.SeriesCollection(inReihe).Values
If Err > 0 Then boZustand = True
On Error GoTo 0
If boZustand = False And arrY_Werte(1) <> "" Then
.SeriesCollection(inReihe).MarkerSize = 12
Else
boZustand = False
End If


Next inReihe
End With
End Sub

Aber es gibt natürlich auch andere Varianten.

Übrigens wird eine ausgeblendete Datenreihe beim Schleifendurchlauf nicht
berücksichtigt - sie wird übersprungen.

Werner News

unread,
Feb 26, 2008, 11:13:19 AM2/26/08
to
Hallo Karin,

schön, dass Du es nochmal probiert hast.

Ja, ich nutze eine Excelversion < 2007. Ich schrieb am 22.02.2008 10:12:

> > wenn wirklich alle Y-Werte leer sind, stoppt der Code bei mir (XL2003)

Ich vermute, wenn ab XL2007 der Zugriff auf die Values einer leeren
Datenreihe möglich ist, dann kann man auch auf Name und Formula
zugreifen, evtl. sogar auch die Markersize einer leeren Reihe ändern.

Nochmal vielen Dank für Deine Antworten

Werner

"Beverly" <Bev...@discussions.microsoft.com> schrieb:
> Hi Werner,
>
> ich habe gerade die Ursache dafür gefunden, weshalb der Code aus meinem
> Beitrag (2/20/2008 7:52 AM) bei dir nicht funktioniert - ich nehme an, du
> arbeitest mit einer Excelversion < 2007?
[...]

Werner News

unread,
Feb 26, 2008, 11:15:21 AM2/26/08
to
Hallo Karin,

schön, dass Du es nochmal probiert hast.

Ja, ich nutze eine Excelversion < 2007. Ich schrieb am 22.02.2008 10:12:

> > wenn wirklich alle Y-Werte leer sind, stoppt der Code bei mir (XL2003)

Ich vermute, wenn ab XL2007 der Zugriff auf die Values einer leeren

Message has been deleted
0 new messages