Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
940to944
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
940to944
940to944
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Microsoft ChartSpace

Microsoft ChartSpace
11.01.2008 14:43:46
Gunnar
Hallo,
ich hoffe, es findet sich jemand, der mir bei einem VBA-Problem mit dem MS-ChartSpace helfen kann.
Ich benutze zwei Charts (als Anschauungsbeispiel stelle man sich ein Fahrtenbuch vor, eine Grafik zeigt die Entwicklung des Benzinpreises, die zweite die des Verbrauchs).
Die Charts werden wie folgt generiert:

cat_1 = Replace("2007·11·24|2007·11·29|2007·12·02|2007·12·09|2007·12·14|2007·12·15|2007·12·17|  _
_
2007·12·19|2007·12·21|2007·12·27|2008·01·01|2008·01·09", "|", ", ")
val_1 = Replace("1.409|1.399|1.299|1.269|1.339|1.369|1.329|1.399|1.349|1.359|1.359|1.389|", "|" _
_
, ", ")
cat_2 = Replace("2007·11·29|2007·12·09|2007·12·21|2007·12·27|2008·01·01", "|", ", ")
'cat_1 = Replace(cat_1, "·", "-") 


Im zweiten Chart funktioniert alles wie gewünscht - sogar noch besser. Ich bekomme auf der x-Achse alle Tage vom ersten Eintrag bis zum letzten angezeigt (egal ob Werte vorhanden sind oder nicht). Die zeitlichen Proportionen stimmen also.
Probleme gibt's im ersten Chart (deshalb habe ich überhaupt die Datum-Werte so 'merkwürdig' formatiert): sobald die Werte der x-Achse als Datumswerte erkannt werden, werden die Einträge quasi kumuliert, d.h. ich sehe nicht mehr alle einzelnen Einträge, sondern sie werden zusammengefaßt, auf der y-Achse also aufaddiert.
Gibt's einen Parameter, der das verhindert? Warum funktioniert's in Chart2 korrekt, aber nicht in Chart1? Ist das von der Anzahl der Werte abhängig?
Ich danke im Voraus für jeden Ansatz!
Gunnar

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Microsoft ChartSpace
11.01.2008 22:39:00
ingUR
Hallo, @Gunnar,
die Eingabeart ist in der Tat merkwürdig und es ist m.E. zu empfehlen, aus dem String eine Array werden zulassen, denn der String akzeptiert wohl nur maximal elf Datenwerte, um als Datenreihe an ein Diagramm übergeben werden zu können.
Für Deienn Fall: Lösche aus cat_1 und val_1 einen Wert und die Anzeige sollte funktionoeren.
Gruß,
Uwe

AW: Microsoft ChartSpace
11.01.2008 23:51:00
ingUR
Hallo, Gunnar,
die Sache fiunktioniert in dieser Form mit bis zu zehn (nicht mit elf, wie vorher geschrieben; abe mich einfach verzählt):

Option Explicit
Private Sub UserForm_Initialize()
Dim cat_1 As String, val_1 As String
Dim cat_2 As String, val_2 As String
Dim c
'   cat_1 = Replace("2007·11·24|2007·11·29|2007·12·02|2007·12·09|2007·12·14|2007·12·15|2007·12·  _
_
17|2007·12·19|2007·12·21|2007·12·27|2008·01·01|2008·01·09", "|", ", ")
'   cat_1 = Replace(cat_1, "·", ".")
'   val_1 = Replace("1.409|1.399|1.299|1.269|1.339|1.369|1.329|1.399|1.349|1.359|1.359|1.389", " _
_
|", ", ")
cat_1 = "2007·11·24|2007·12·29|2007·12·02|2007·12·09|2007·12·14|2007·12·15|2007·12·17|2007·  _
_
12·19|2007·12·21|2007·12·27"
'cat_1 = cat_1 & "|2007·01·01|2007·01·09"
val_1 = "1.409|1.399|1.299|1.269|1.339|1.369|1.329|1.399|1.349|1.359"
'val_1 = val_1 & "|1.359|1.389"
cat_1 = Replace(cat_1, "|", ", ")
cat_1 = Replace(cat_1, "·", ".")
val_1 = Replace(val_1, "|", ", ")
cat_2 = Replace("2007·11·29|2007·12·09|2007·12·21|2007·12·27|2008·01·01", "|", ", ")
cat_2 = Replace(cat_2, "·", ".")
val_2 = Replace("9.84815618221258|10.1508771929825|10.2426614481409|11|10.1372093023256", "| _
_
", ", ")
With ChartSpace1
.Clear
.Charts.Add
Set c = .Constants
.HasChartSpaceTitle = True
.AllowFiltering = True
.ChartSpaceTitle.Caption = "€ / Liter"
.ChartSpaceTitle.Font.Bold = True
With .Charts(0)
.SeriesCollection.Add
With .SeriesCollection(0)
.Interior.Color = "Orange"
.Caption = "€ / Liter"
.SetData c.chDimCategories, c.chDataLiteral, cat_1
.SetData c.chDimValues, c.chDataLiteral, val_1
End With
.Type = c.chChartTypeLine
.Axes(c.chAxisPositionBottom).NumberFormat = "dd/mm/yy"
.Axes(c.chAxisPositionLeft).NumberFormat = "#0.000"
End With
End With
With ChartSpace2
.Clear
.Charts.Add
Set c = .Constants
.HasChartSpaceTitle = True
.AllowFiltering = True
.ChartSpaceTitle.Caption = "Liter / 100km"
.ChartSpaceTitle.Font.Bold = True
With .Charts(0)
.SeriesCollection.Add
With .SeriesCollection(0)
.Interior.Color = "Orange"
.Caption = "Liter / 100km"
.SetData c.chDimCategories, c.chDataLiteral, cat_2
.SetData c.chDimValues, c.chDataLiteral, val_2
End With
.Type = c.chChartTypeLine
'Folgezeile löschen, wenn Anzeige kumuliert wird
.Axes(c.chAxisPositionBottom).NumberFormat = "dd/mm/yy"
.Axes(c.chAxisPositionLeft).NumberFormat = "#0.0"
End With
End With
End Sub


Gruß,
Uwe

Anzeige
AW: Microsoft ChartSpace
12.01.2008 08:43:38
Gunnar
Zuerst Mal: vielen Dank, Uwe!
Das Problem ist: die Daten stehen nicht wirklich statisch in dem übergebennen String. Der wird aus einer Datenbank generiert. Und es werden sehr viel mehr als 10 Werte sein.
Vielleicht sollte ich noch anmerken, dass diese Charts auch nicht innerhalb von Excel generiert werden, sondern auf einer WebSite (was aber hinsichtlich der Syntax keinen Unterschied machen sollte). Auch dient das "Fahrtenbuch" hier nur als ein vereinfachtes Beispiel, das ich dann (wenn's funktioniert) auf eine "ernsthafte" Anwendung übertragen möchte.
Wenn ich Dich richtig verstehe, sollte ich also bei einer Anzahl von mehr als 10 Werten ein Array übergeben (zumindest, wenn die x-Achse gültige Datum-Werte enthalten soll, die mit dem Sonderzeichen formatierte Variante yyyy·mm·dd funktioniert ja auch mit mehr Werten).
Muss ich dazu die Zeilen

.SetData c.chDimCategories, c.chDataLiteral, {Variable}

anpassen?
Wie würde der Aufbau des Arrays aussehen? Derzeit ist der Inhalt der Strings nach der Replace-Anweisung wie folgt aufgebaut: cat_1 = "{erstes Datum}, {zweites Datum}[, ...]" (also einzelne Daten durch Komma und Leerzeichen getrennt). Verstehe ich die Array-Version so richtig:


cat_1(1) = {erstes Datum}
cat_1(2) = {zweites Datum}


Vielen, vielen Dank für Deine Hilfe!
Gunnar

Anzeige
AW: Microsoft ChartSpace
12.01.2008 11:42:28
ingUR
Hallo, Gunnar,
da gibt es ja mehrere Rahmenbedingungen, die ich so nicht nachbauen werde können.
Das Hauptfragezeichen hinterläßt bei mir Deine Anmerkung: «... dass diese Charts auch nicht innerhalb von Excel generiert werden, sondern auf einer WebSite ...», denn mit den Bereich über die interaktive Officeanwendung in Internet, habe ich mich nur die Erfahrung, wie sie zum Veröffentlichen eines Tabellenbereichs erforderlich ist.
Unklar bleibt mir auch, in welcher Art die Daten von der Prozedur gesammelt werden, um für die SeriesCollection(1) bereitgestellt zu werden, denn möglicherweise eröffnet sich hier noch ein Weg, indem man die "Standardfüllung" .SetData vornimmt und anschliessen die entsprechenden SeriesCollection füllt (doch das ist nur eine Gedanke, der auf seine Tauglichkeit nicht tiefer geprüft ist, da das Problem ja bereits für die X-Wertte auftaucht, eine mögliche Datenerweiterung auch dort vorgenommen werden muß).
Auch mit dem Element ChartSpace habe ich noch zu wenig Erfahrung gesammelt, um die Begründung zu liefern, warum Deine Aufgabe mit den zehn Festwerten funktioniert, jedoch bei einer Anzahl, die darüber hinaus reicht, versagt (vermute ein interen Standardbereichdimensionierung, die ChartSpace selbst für Festdaten vornimmt). Somit ist wohl auch nicht anzunehemen, dass eine Array, angewendet als Datenquelle für das ChartSpace-Objekt, dich zum Erfolg führt.
Bliebe eigentlich nur der Datenbereich auf einem Tabellenbatt. Doch an dieser Stelle taucht dann wieder das oben erwähnte Fragezeichen auf.
Komme jetzt nicht nicht dazu, mich der Sache weitergehend anzunehmen (markiere auch aus diesem Grund die Frage als offen), werde jedoch mich im Laufe des Wochenende noch einmal damit beschäftigen, so denn zwischenzeitlich keine Lösung gefunden wurde. Hilfreich wäre bestimmt, wenn man in einer VBA-Hilfe oder in der Weite des Netzes auf eine detailierte Hilfebeschreibung für das Objekt ChartSpace stößt.
Gruß,
Uwe
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige