Hi,
folgendes Drama...
Ich habe ein Makro geschrieben dass aus ein paar Startwerten eine Kurvenschaar generieren soll. Das Makro produziert die Werte und füllt sie in die Tabelle ein, soweit funktioniert das ganze. Im zweiten Schritt soll aus diesen Werten eine Kurvenschaar generiert werden. Jetzt ist es so dass wenn ich eine kritische Anzahl an Werten überschreite, Das Makro plötzlich mit dem Laufzeitfehler 1004 abbricht. Fehlermeldung "Die Values-Eigenschaft des Series Objektes kann nicht festgelegt werden". Ich habs soweit ausgetestet und herumgedoktert dass ich denke es scheitert am Datentyp des Series Objektes. Ich vermute dass die Variable 'ActiveChart.SeriesCollections.Values' schlicht und ergreifend zu klein ist um mein Variant/Double Array hinein zu schreiben. Kann man das irgendwie umgehen? Das Double Array wird je nach Kurve mit unterschiedlich vielen Daten bestückt und nach abschluss der Schleife(nach dem die Kurve gezeichnet wurde), wird es mit ReDim neu dimensioniert um die neuen Werte aufnehmen zu können.
Langsam bin ich richtig ratlos, Ich hab es schon mit Einfügen einer Range statt über das Array probiert, aber da macht der nur Müll und nimmt die X-Werte linear steigend mit Schrittweite 1 an, was leider völlig unbrauchbar ist. Vielleicht fällt euch ja etwas ein.
Sub Zeichnen()
ThisWorkbook.Worksheets(2).Activate
ActiveSheet.ChartObjects.Delete
Dim i As Long
Dim l As Long
Dim reihe As Range
Dim Xreihe() As Variant
Dim Yreihe() As Variant
i = 0
l = 0
'Set reihe = Worksheets(1).Range("M5:M10")
Dim Dia As ChartObject
Dim Diag As Chart
Dim Cname As String
Dim Dname As String
Dim anz As Long
Set Dia = ActiveSheet.ChartObjects.Add(10, 210, 560, 400) 'hier chart generieren
Cname = Dia.Name
Set Diag = Dia.Chart
Diag.ChartType = xlXYScatterLinesNoMarkers
Dname = Diag.Name
Diag.HasDataTable = False
For i = 1 To 10 Step 1 'Arrays befüllen
ReDim Xreihe(1)
ReDim Yreihe(1)
ThisWorkbook.Worksheets(1).Activate
anz = ActiveSheet.Cells(2, 11 + (2 * i)) - 1
'Set reihe = Range(ActiveSheet.Cells(5, 11 + (2 * i)), ActiveSheet.Cells(5 + anz, 11 + (2 * i)))
ReDim Xreihe(anz)
ReDim Yreihe(anz)
For l = 0 To anz Step 1
Xreihe(l) = Round(ActiveSheet.Cells(l + 5, 12 + (2 * i)), 2)
Yreihe(l) = Round(ActiveSheet.Cells(l + 5, 11 + (2 * i)), 2)
Next l
'Kurven im Chart zeichnen
ThisWorkbook.Worksheets(2).Activate
ActiveSheet.ChartObjects(Cname).Activate
ActiveChart.ChartArea.Select
If i < 2 Then
ActiveChart.SetSourceData Source:=Worksheets(1).Range("A1"), PlotBy:=xlRows
End If
ActiveChart.SeriesCollection.NewSeries
'ActiveChart.SeriesCollection.Add _
'Source:=reihe
ActiveChart.SeriesCollection(i).XValues = Xreihe
ActiveChart.SeriesCollection(i).Values = Yreihe
ActiveChart.SeriesCollection(i).Name = CStr(i)
Next i
ThisWorkbook.Worksheets(2).Activate
End Sub
|