PDA

Vollständige Version anzeigen : Laufzeitfehler 1004 - Select Methode des Point Objektes....


jhuebner1
10.11.2005, 15:44
Hallo,

ich versuche eine Grafik mittels VBA so zu verändern, dass einzelne Punkte rot markiert werden sollen. Beispielsweise alle Oktoberwerte rot, also Oktober 2005, O 2004, O 2003.... alle anderen Werte sollen blau sein.
Dazu habe ich das folgende VBA Makro.
Das Teil läuft auch problemlos, sofern in einem Tabellenblatt nur 1 Grafik enthalten ist.
Hier das lauffähige Makro:
Sub Makro1()
'
' Makro2 Makro
' Makro am 04.11.2005 von Windows User aufgezeichnet
'

Range("a1").Select ' dies nur damit die Zelle 1 angewählt wird und es keine Fehlermeldung gibt, faölls man gerade das Diagramm angewählt hat
anzahl = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row 'für die Schleife wird hier abgefragt, wievile Einträge für die Grafik es gibt
' hier wird nur das Diagramm und die Linie ausgewählt
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.SeriesCollection(1).Select
'hier die Schleife, die nacheinander jeden Datenpunkt anspringt (Points(n).select)
For n = 1 To anzahl
On Error GoTo ende 'Fehlerunterdrückung
ActiveChart.SeriesCollection(1).Points(n).Select
' hier die eigentliche Steuerung mittels Kriterium, gebildet aus der Hilfsspalte und der Eingabe des Monats im Feld i1
If Sheets("BRgesamt").Cells(n + 1, 3).Value = Sheets("BRgesamt").Range("i1").Value Then
' ja Zweig mit Umstellung der Farbe und zusätzlich noch der Größe des Datenpunktes
With Selection
.MarkerBackgroundColorIndex = 3
.MarkerForegroundColorIndex = 3
.MarkerSize = 8

End With
Else
' nein-Zweig, alles wird wieder zurückgestellt
With Selection
.MarkerBackgroundColorIndex = 5
.MarkerForegroundColorIndex = xlNone
.MarkerSize = 7
End With
End If
Next
ende:
Range("i1").Select
End Sub

Sobald ich aber versuche, ein Makro für alle Tabellenblätter zu schreiben (also das Makro nicht 8x (da 8 Grafiken) einzeln auszuführen, sondern ein Makro nur 1x zu starten) gibt es die oben beschriebene Fehlermeldung.

Hier mein Versuch:
Sub Makro1()
'
' Makro2 Makro
' Makro am 04.11.2005 von Windows User aufgezeichnet
'
Dim y As Integer
Dim r As Integer


y = ActiveWorkbook.Worksheets(1).ChartObjects.Count
ActiveWorkbook.Worksheets(1).Select
'MsgBox (y)
r = 2
For z = 1 To y
' MsgBox (z)
Range("a1").Select ' dies nur damit die Zelle 1 angewählt wird und es keine Fehlermeldung gibt, faölls man gerade das Diagramm angewählt hat
anzahl = ActiveSheet.Cells(Rows.Count, r).End(xlUp).Row 'für die Schleife wird hier abgefragt, wievile Einträge für die Grafik es gibt
'MsgBox (anzahl)
'r = r + 2
' hier wird nur das Diagramm und die Linie ausgewählt
ActiveSheet.ChartObjects(z).Activate
ActiveChart.SeriesCollection(1).Select
'hier die Schleife, die nacheinander jeden Datenpunkt anspringt (Points(n).select)
For n = 1 To anzahl
On Error GoTo ende 'Fehlerunterdrückung
ActiveChart.SeriesCollection(1).Points(n).Select
On Error GoTo ende
' hier die eigentliche Steuerung mittels Kriterium, gebildet aus der Hilfsspalte und der Eingabe des Monats im Feld i1
If Sheets(1).Cells(n + 1, 1).Value = Sheets(1).Range("i1").Value Then
' ja Zweig mit Umstellung der Farbe und zusätzlich noch der Größe des Datenpunktes
With Selection
.MarkerBackgroundColorIndex = 3
.MarkerForegroundColorIndex = 3
.MarkerSize = 8

End With
Else
' nein-Zweig, alles wird wieder zurückgestellt
With Selection
.MarkerBackgroundColorIndex = 5
.MarkerForegroundColorIndex = xlNone
.MarkerSize = 7
End With
End If
Next
ende:
Range("i1").Select
Next
End Sub

Dabei ist das kuriose:
Die erste Grafik geht er völlig normal durch, die zweite fängt er an und bricht am Ende der Grafik mit der Fehlermeldung ab.
Was ist falsch?

Danke für jeden Hinweis.

Gruß
JH

jinx
10.11.2005, 21:31
<font size="2" face="Century Gothic">Moin, JH,

Beispielmappe zum leichteren Nachverfolgen wäre angenehm...</font>

Beverly
11.11.2005, 06:35
Hi JH,

ändere deinen Code

For n = 1 To anzahl
On Error GoTo ende 'Fehlerunterdrückung
If n = anzahl Then GoTo ende
ActiveChart.SeriesCollection(1).Points(n).Select

Vielleicht hilft das ja schon.

jinx
11.11.2005, 07:01
<font size="2" face="Century Gothic">Moin, Beverly,

dann sollte der Schleifenzähler verändert werden, statt zusätzliche und überflüssige Prüfungen durchzuführen...</font>

Beverly
11.11.2005, 07:30
Hi jinx,

OK, dann besser

For n = 1 To anzahl -1
On Error GoTo ende 'Fehlerunterdrückung
ActiveChart.SeriesCollection(1).Points(n).Select

Frage: wie lässt sich die Anzahl der Diagramme je Tabellenblatt zählen? mit loAnzChart = Worksheets.ChartObjects.Count funktioniert das nicht. Sonst könnte man eine Schleife über alle Grafiken im Tabellenblatt machen.

PS: Frage hat sich erledigt

jhuebner1
11.11.2005, 07:49
Hallo,

hier die Beispieldatei.
Es sind jetzt 2 Diagramme enthalten.
Das erste läuft er durch, das zweite eigentlich auch, ganz am Schluß hängt er sich aber auf.
Warum?
Die vorgegebene Schleifenkorrektur mit anzahl-1 bringt leider nix.

Gruß
JH

Beverly
11.11.2005, 08:09
Hi JH,

versuche es dann doch einmal mit

For n = 1 To anzahl
On Error GoTo ende 'Fehlerunterdrückung
If n = anzahl - 1 Then GoTo ende

Da läuft der Code bei mir durch und alle Punkte werden geändert.

Aber es werden alle Punkte geändert und nicht nur die für August. Dazu solltest du entweder den Code zu "H1" ändern oder "Aug" in I1 schreiben ;)

jhuebner1
11.11.2005, 08:29
Hallo Beverly,

vielen Dank für den Tipp.
Es läuft tatsächlich!!!!!

Das alle Punkte geändert werden ist korrekt.
Er soll ja jeden vergleiche, ob das ein Oktober ist oder nicht. Wenn nein, mache blau, wenn ja, mache rot.

Vielen Dank!
Muss das jetzt mal anpassen, mal schauen, ob ich mich wieder melden muss!
:-)

Gruß
JH

Beverly
11.11.2005, 08:39
Hi JH,

ist schon richtig, dass alle durchsucht und geändert werden. Nur durch den Bezug auf Zelle I1, in der ja nichts drin steht, macht er alle blau, auch die, die du nach Rot geändert haben willst. Ich habe den Code bei mir auf "H1" angepasst, und richtig werden die in H1 ausgewählten Datumspunkte rot gefärbt. Im Einzelschrittmodus war mir aufgefallenen, dass immer nur der nein-Teil der Bedingung durchlaufen wurde.

jhuebner1
11.11.2005, 10:59
Hallo zusammen, hallo Beverly,

nächstes Problem:
Jetzt habe ich vor, die Diagramme auf einem separaten Blatt ausgeben zu lassen.
Die Diagramme sind dann also nicht als Tabellenblatt erfasst, sondern als Diagramm(blatt?). Jetzt läuft aber mein Makro nicht mehr, da er zählt, wieviele Diagramme es im Tabellenblatt gibt. Das sind aber Null.
Wie bringe ich ihn dazu, die Diagramme, die ja separat sind, anzusprechen. Mit Worksheet Count funktioniert das nicht.....

Vielen DANK!!!!

Gruß
JH

jinx
11.11.2005, 11:21
<font size="2" face="Century Gothic">Moin, jhuebner,

ein Blick in den Objektkatalog und das Ablaufmodell von Excel würde aufzeigen, dass Diagrammblätter anders angesprochen werden als Diagramme als Teile einer Tabelle...</font>

Beverly
11.11.2005, 11:24
Hi JH,

y = Charts.Count

zum Zählen der Diagrammblätter

PS: Sorry, jinx war schneller

jhuebner1
11.11.2005, 12:04
Hallo Jinx, hallo Karin,

danke für die Tipps.
Den Objektkatalog oder ein Ablaufmodell kenne ich leider nicht und habe bei der Excel Hilfe auch nicht gefunden. Wäre sicherlich praktisch und hilfreich, dann würde ich vermutlich viele "doofe" Fragen gar nicht stellen.
Wie gesagt, da ich das nicht weiß, hier also die Frage:

Der Hinweis mit y = Charts.Count klappt teilweise.
Wenn ich msgbox(y) mir anzeigen lasse gibt er mir 2 aus.
Das entspricht dann den beiden Diagrammblättern.
Dazu aber 2 Fragen:

1.) Wie spreche ich die Blätter dann an?
ActiveWorkbook.Charts(1).Select?

2.) Auf jedem der beiden Blätter habe ich jeweils 2 (!) Diagramme. Wie wähle ich die beiden Diagramme aus? Charts(1).Charts(1).Select?? :-)

Gruß
JH