Die
Function "DiagrammErstellen" wird innerhalb eine Makros aufgerufen.
Vorher wurde in der Makro-Laufzeit das Array "WertePaare" befüllt.
Aus den Werten dieses Arrays soll ein Diagramm neu erstellt werden.
Das Problem besteht darin, dass nicht -wie gewünscht- EINE Datenreihe
erstellt wird, sondern DREI (davon eine ganz leer, eine besteht aus den
x-Werten und eine aus den y-Werten).
Was ist am Code falsch ? Zu meinem Code: Ich bin KEIN Profi und achte
eher auf Lesbarkeit. Daher wird den Profis wahrscheinlich beim Lesen oft
"Das Messer in der Tasche aufgehen" wenn sie das lesen - sorry dafür schon jetzt.
Vielen Dank schon mal im Voraus,
NicSteel
Function DiagrammErstellen()
Dim cDia As Chart
Dim shBlatt As Sheets
Dim sDiaName As String
Const sName As String = "Wertpaare"
Dim i As Integer
Dim WertePaareX() As Variant
Dim WertePaareY() As Variant
Dim sReihe1Name As String
Dim rReihe1xWerte As Range
Dim rReihe1yWerte As Range
'Tabellenblatt neu generieren für die Daten des Diagramms
'Diagramm kann keine "großen" Arrays als Values und xValues aufnehmen
'altes Sheet mit Diagramm löschen
If SheetExists(sName) Then
Application.DisplayAlerts = False
Sheets(sName).Delete
Application.DisplayAlerts = True
End If
'neues Sheet einfügen
ThisWorkbook.Worksheets.Add.Name = sName
'in neues Sheet das Werte-Array einfügen
ThisWorkbook.ActiveSheet.Cells(1, 1) = "Zeit"
ThisWorkbook.ActiveSheet.Cells(1, 2) = "Wert"
ReDim WertePaareX(1 To AnzahlWertePaare)
ReDim WertePaareY(1 To AnzahlWertePaare)
For i = 1 To AnzahlWertePaare
WertePaareX(i) = WertePaare(i, 1)
WertePaareY(i) = WertePaare(i, 2)
Next i
For i = 1 To AnzahlWertePaare
ThisWorkbook.ActiveSheet.Cells(i + 1, 1) = WertePaareX(i)
ThisWorkbook.ActiveSheet.Cells(i + 1, 2) = WertePaareY(i)
Next i
'Reihe1 festlegen
sReihe1Name = "Wert"
Set rReihe1xWerte = ThisWorkbook.ActiveSheet.Range(Cells(2, 1), Cells(AnzahlWertePaare + 1, 1))
Set rReihe1yWerte = ThisWorkbook.ActiveSheet.Range(Cells(2, 2), Cells(AnzahlWertePaare + 1, 2))
'neues Diagramm erstellen
sDiaName = sName
Set cDia = Charts.Add
Set cDia = cDia.Location(Where:=xlLocationAsObject, Name:=sName) ' Ort
With cDia
.ChartType = xlXYScatterSmoothNoMarkers
.HasTitle = True
.ChartTitle.Text = sDiaName
.SeriesCollection.NewSeries
With ActiveChart.FullSeriesCollection(1)
'HIER PASSIERT DER UNSINN !!!
.Name = sReihe1Name
.Values = rReihe1yWerte
.XValues = rReihe1xWerte
End With
.SetElement (msoElementLegendTop)
End With
End Function