Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
988to992
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
988to992
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Chart SeriesCollection per VBA dynamisch ändern

Chart SeriesCollection per VBA dynamisch ändern
30.06.2008 14:47:25
Philipp
Hallo zusammmen,
ich bin momentan ziehmlich ratlos und nachdem ich nun sämtliche Foren durchkämmt habe wende ich mich nun an Euch.
Zur Zeit versuche ich "einfach" nur die letzte Zeile meines Datenblattes (Data Input) auszulesen und dann mit diesem Wert die SeriesCollection zu erweitern, um ein bestehendes Diagramm zu bearbeiten.
Bei diesem Diagramm handel es sich um ein 2 - xlColumns(Also ein Liniendiagramm mit 2 Achsen). Klingt für Euch wahrscheinlich einfach, bei mir gibt es aber leider nur Fragezeichen.....
Der erste Teil das Auslesen der letzten Zeile, hat mit einem geklauten Skript schon sehr gut geklappt. ;)
Mit dem Macrorecorder habe ich mir den Änderungsteil aufgezeichnet und die entsprechenden Teile mit der Variablen versehen.
Das Skript sieht folgendermaßen aus:

Sub Macro4()
Sheets("Data Input").Select
Dim iValue As Integer
Dim Loletzte As Long
Loletzte = IIf(IsEmpty(Range("B65536")), Range("B65536").End(xlUp).Row, 65536)
Cells(Loletzte, 1).Select
iValue = ActiveCell.Row
MsgBox "Variablenwert: " & iValue
Sheets("graphic_peter").Select
ActiveChart.SeriesCollection(1).XValues = "='Data Input'!R45C1:R & iValue & C1"
ActiveChart.SeriesCollection(1).Values = "='Data Input'!R45C14:R & iValue & C14"
ActiveChart.SeriesCollection(2).XValues = "='Data Input'!R45C1:R & iValue & C1"
ActiveChart.SeriesCollection(2).Values = "='Data Input'!R45C11:R & iValue & C11"
ActiveChart.SeriesCollection(3).XValues = "='Data Input'!R45C1:R & iValue & C1"
ActiveChart.SeriesCollection(3).Values = "='Data Input'!R45C10:R & iValue & C10"
ActiveChart.SeriesCollection(4).XValues = "='Data Input'!R45C1:R & iValue & C1"
ActiveChart.SeriesCollection(4).Values = "='Data Input'!R45C13:R & iValue & C13"
End Sub


Leider springt nach der Ausgabe meiner Message Box, in welcher der richtige Wert steht der Debugger an und versucht mir klar zu amchen dass:
Runtime Error 1004
Unable to set XValues property of ther Series class
Hoffentlich kann mir hier jemand weiter helfen.....
Falls Ihr noch einen Ratschlag habt, wie man die 2te Axe in Abhängigkeit von "='Data Input'!R45C13:R & iValue & C13" dynamisch erweitern kann, wäre ich Euch echt verbunden.
Ich habe von dem ganzen VBA leider keine Ahnung.
Danke für Eure Hilfe

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
30.06.2008 16:10:00
Mathias
Du hast die Formel falsch zusammengesetzt. Das muss wie folgt sein:
ActiveChart.SeriesCollection(1).XValues = "='Data Input'!R45C1:R" & iValue & C1
ActiveChart.SeriesCollection(1).Values = "='Data Input'!R45C14:R" & iValue & C14
ActiveChart.SeriesCollection(2).XValues = "='Data Input'!R45C1:R" & iValue & C1
ActiveChart.SeriesCollection(2).Values = "='Data Input'!R45C11:R" & iValue & C11
ActiveChart.SeriesCollection(3).XValues = "='Data Input'!R45C1:R" & iValue & C1
ActiveChart.SeriesCollection(3).Values = "='Data Input'!R45C10:R" & iValue & C10
ActiveChart.SeriesCollection(4).XValues = "='Data Input'!R45C1:R" & iValue & C1
ActiveChart.SeriesCollection(4).Values = "='Data Input'!R45C13:R" & iValue & C13

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 06:43:00
Philipp
Hallo Mathias,
Danke erstmal für Deine Hilfe.
Leider klappt es nach der Änderung leider immer noch nicht.
Wieder erscheit die Meldung: Unable to set the XValues property of the Series class.
Das Programm erkennt nun zwar die eingesetzten Variablen, kann aber leider mit den Columns dahinter nichts mehr anfangen. Diese sind dann Empty.
In den VBA Locals sieht es dann ungefähr so aus:
Expression - Value - Type
iValue - 57 - Integer
Loletzte - 57 - Long
C1 - Empty - Variant/Empty
C14 - Empty - Variant/Empty
C11 - Empty - Variant/Empty
C10 - Empty - Variant/Empty
C13 - Empty - Variant/Empty
Wir bewegen uns aber wie es scheint in die richtige Richtung. Vielleicht hat jemand ja einen Ansatz wie wir die Werte, bzw. mein Skript doch noch zum Laufen bekommen.
Danke für die Hilfe

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 07:34:00
Mathias
Da hab ich wohl noch nen Fehler reingehauen, hier die richtige Variante:
ActiveChart.SeriesCollection(1).XValues = "='Data Input'!R45C1:R" & iValue & "C1"
ActiveChart.SeriesCollection(1).Values = "='Data Input'!R45C14:R" & iValue & "C14"
ActiveChart.SeriesCollection(2).XValues = "='Data Input'!R45C1:R" & iValue & "C1"
ActiveChart.SeriesCollection(2).Values = "='Data Input'!R45C11:R" & iValue & "C11"
ActiveChart.SeriesCollection(3).XValues = "='Data Input'!R45C1:R" & iValue & "C1"
ActiveChart.SeriesCollection(3).Values = "='Data Input'!R45C10:R" & iValue & "C10"
ActiveChart.SeriesCollection(4).XValues = "='Data Input'!R45C1:R" & iValue & "C1"
ActiveChart.SeriesCollection(4).Values = "='Data Input'!R45C13:R" & iValue & "C13"

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 07:49:42
Philipp
Hallo Mathias,
hab ich auch vergessen zu sagen!
Diese Variante habe ich auch schon ausprobiert und wieder kommt die bekannte Fehlermeldung.
Falls du nun auch Ratlos sein solltest, hast du eine andere Idee wie man mein Probem eventuell beikommen kann?
Soweit ich weiss, soll man ja eigentlich durch geziehlte Statements ein Diagramm verändern können, ohne direkt ein Diagramm neu zu bauen. Ist das Richtig?
Viele Grüße Danke

AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 08:37:40
Mathias
Markierst du eigentlich das Diagramm? Mir fehlt irgendwie folgende Zeilen:
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.ChartArea.Select
Bau das Ganze mal vor das erste SeriesCollection.

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 09:07:00
Philipp
Hallo Markus,
meinen gesamten Code habe ich vorab in das Vorum kopiert.
Was alles zu markieren, aktivieren ist, davon habe ich keine Ahnung.
Ich habe nun mal den Codeschnipsel eingefügt und nun sieht der gesamte Code in dem Modul wie Folgt aus:

Sub Macro4()
Sheets("Data Input").Select
Dim iValue As Integer
Dim Loletzte As Long
Loletzte = IIf(IsEmpty(Range("B65536")), Range("B65536").End(xlUp).Row, 65536)
Cells(Loletzte, 1).Select
iValue = ActiveCell.Row
MsgBox "Variablenwert: " & iValue
Sheets("graphic_peter").Select
ActiveSheet.ChartObjects("graphic_peter").Activate
ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection(1).XValues = "='Data Input'!R45C1:R" & iValue & "C1"
ActiveChart.SeriesCollection(1).Values = "='Data Input'!R45C14:R" & iValue & "C14"
ActiveChart.SeriesCollection(2).XValues = "='Data Input'!R45C1:R" & iValue & "C1"
ActiveChart.SeriesCollection(2).Values = "='Data Input'!R45C11:R" & iValue & "C11"
ActiveChart.SeriesCollection(3).XValues = "='Data Input'!R45C1:R" & iValue & "C1"
ActiveChart.SeriesCollection(3).Values = "='Data Input'!R45C10:R" & iValue & "C10"
ActiveChart.SeriesCollection(4).XValues = "='Data Input'!R45C1:R" & iValue & "C1"
ActiveChart.SeriesCollection(4).Values = "='Data Input'!R45C13:R" & iValue & "C13"
End Sub


Hoffe dass dies Dir dann besser weiterhilft.
Leider kommt nun die Fehlermeldung: Unable to get the Chart Object property of the Chart Class

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 09:32:00
Mathias
Heisst dein Chart "graphic_peter"?
Um den Namen des Diagramms herauszufinden, hälst du "strg" gedrückt und wählst dann mit der Maus das Diagramm aus. Oben Links in dem Anzeigefeld, wo normalerweise die aktive Zelle angezeigt wird ("A1") steht nur der Diagrammname. Den kopirst du und fügst ihn entsprechend anstelle von "graphic_peter" ein.
Was gibt den die Nachricht "MsgBox "Variablenwert: " & iValue" aus? Erscheint hier der Zeilenwert, den du brauchst? Am besten Stück für Stück den Code durchgehen.

AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 11:21:22
Philipp
Das mit dem Strg klappt hier leider nicht, da das Diagramm in einem eigens dafür generierten Sheet dargestellt wird. Ohne Zellen etc. Wenn ich das hier mache wird mir nur Chart Area oder die verschiedensten Bereiche des Charts in dem Feld angezeigt.
Aber in dem VBA Editor unter Properties wird dieses Sheet bzw. Chart als Diagramm3 definiert.
Den Namen habe ich direkt, wie vorgeschlagen, eingesetzt doch leider kommt weiterhin die Fehlermeldung "Unable to get the Chart Object property of the Chart Class" und deine erste vorgeschlagene Zeile wird makiert.
Der Wert in der Messagebox 57 wird 100% richtig zurückgegeben und die Variable ist auch befüllt.

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 13:42:34
Mathias
Mir fällt noch was ein:
Der Befehl ActiveChart.SeriesCollection setzt ein bereits vorhandenen Quellzeile vor, die einfach nur abgändert wird. Gibt es diese nicht, weil beispielsweise das Diagramm zu Beginn komplett leer ist, kommt die Fehlermeldung.
Du musst also den Befehl ActiveChart.SeriesCollection.NewSeries davorsetzen. Er erstellt dann also ne leere Quellzeile, die dann mit ActiveChart.SeriesCollection gefüllt wird. Beachte aber, da bei einem bereits gefüllten Diagramm wiederum die mit NewSeries erzeugten neuen Quellzeilen dem Diagramm angehängt werden. Am besten wäre es, du löscht vorher die gesamte Quelle des Diagramms und füllst die nachher mit NewSeries und SeriesCollection neu.

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 13:59:00
Philipp
Hallo Markus,
Weltklasse.... das hat funktioniert!!!! Wahhhhnnnnsssssiiiiinnnnn!!!! Danke!!!!
Weißt du rein zufällig, wie ich ich jetzt in diesem Zusammenhang nur noch vorab die bestehenden Werte vorab rauslöschen kann? Im Objekt Browser steht bei SeriesCollection keine derartige Referenz.
Danke aber trtotzdem nochmal..
Gruß

AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 14:11:00
Philipp
Sorry vor lauter Freude habe ich ganz vergessen zu sagen, dass ich die Werte ja gar nicht manuell Löschen konnte. Ich musste immerhin noch den Platzhalter ={1} in die geleerten Zellen einfügen.
Dies habe ich auch schon in das Macro wie gehabt eingefügt doch leider, wer Ahne es, hat es natürlich nicht funktioniert.
Sollte dieser Platzhalter aber eingefügt werden müssen, wären wir wieder am Anfang des Problems sofern es hierfür nicht auch einen Befehl gibt.
Gibt es hier nicht so etwas wie unter UNIX einen übermächtigen Befehl der gar nicht auf Fehlermeldungen achtet sondern einfach die Daten auf Teufel komm raus einfügt?

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
01.07.2008 14:39:54
Mathias
Dafür gibt es auch keinen befehl. Man muss da etwas tricksen:
Setzt einfach folgenden Befehl:
ActiveChart.SetSourceData Source:=Sheets("graphic_peter").Range("A1"), PlotBy:= xlRows
Wir setzten also die Quelle erstmal auf leer. Danach können wir das Diagramm normal füllen.

AW: Chart SeriesCollection per VBA dynamisch ändern
02.07.2008 06:54:00
Philipp
Das habe ich nun mal gemacht und das Statement direkt vor ActiveChart.SeriesCollection.NewSeries gesetzt.
Bei der Ausführung kam es zu dem Runtime Error 438 "Object doesn`t support this property or method"
Das hat wahrscheinlich damit zu tun, dass beim Anlegen des Diagramms keine Range angegeben wurde sondern lediglich die einzelnen Series eingegeben wurden.

Anzeige
AW: Chart SeriesCollection per VBA dynamisch ändern
02.07.2008 07:57:00
Mathias
Lad am besten mal das File hoch. Dann schau ich mir das Ganze mal an. Bei mir läuft das korrekt

AW: Chart SeriesCollection per VBA dynamisch ändern
02.07.2008 09:12:12
Philipp
So ich habe das File noch ein wenig abwandeln müssen, aber die grundlegenden Dinge sind gleich.
Lediglich das Bekannte graphic_peter wurde zu graphic abgeändert.
https://www.herber.de/bbs/user/53518.xls
Ich Hoffe das Hilft weiter.
Weisst du zudem, wie ich die rechte Axse (0-160) dynamisch anpassen kann, sollte der Wert der blauen Linie größer 160 werden?

AW: Chart SeriesCollection per VBA dynamisch ändern
02.07.2008 12:51:29
Mathias
Der Code geht schon, nur hast du ein paar Sachen nicht beachtet:
ActiveChart.SetSourceData Source musst du natürlich auf ein anderes Blatt beziehen, das das Chartböatt ja keine Zellen besitzt.
Du hast die Aktivierung des Charts vergessen.
Zudem muss NewSeries für jede neue Zeile angewendet werden.
Hab das mal zusammengefasst in der Datei. Einfach mal den Button drücken:
https://www.herber.de/bbs/user/53523.xls

AW: Chart SeriesCollection per VBA dynamisch ändern
02.07.2008 13:54:09
Philipp
Hallo Mathias,
das war ja fix und es funktioniert. Wahnsinn!!!
Das Diagramm ist nun zwar nun aus seiner ursprünglichen Version, also Diagramm mit zwei Axsen gerissen worden, aber das macht nichts.
Ich habe schon herausbekommen, wie ich diesen Zustand nun mit den nötigen Formatierungen innerhalb des Makros nacharbeiten kann. Somit sollte ich es dann wieder in sein ursprüngliche Aussehen zurückversetzen können.
Danke für deine Hilfe.

AW: Chart SeriesCollection per VBA dynamisch ändern
02.07.2008 14:30:04
Mathias
Das musst du halt deinen wünschen ansprechend noch anpassen. Du weisst ja jetzt auf was du achten musst :)

AW: Chart SeriesCollection per VBA dynamisch ändern
03.07.2008 09:04:09
Philipp
Ja das klappt und wie....
Ich kann nur Tausend Dank sagen.
Da bin / wär ich nach stundenlangem Foren durchstöbern nie drauf gekommen.
Danke nochmal

55 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige