MSChart -2dPie, Darstellungsproblem

11/09/2008 - 11:34 von Jürgen Schmitt | Report spam
Hallo NG,
in ein Kreisdiagramm (3 Torten mit jeweils 3 Segmenten) sollen
unterschiedliche Zahlenwerte korrekt dargestellt werden.
Beispiel:

Dim i As Byte 'Schleife
Dim Wert1, Wert2, Wert3, Wert4, Wert5, Wert6, Wert7 As Byte
Wert1 = 5: Wert2 = 10: Wert3 = 15
Wert4 = 20: Wert5 = 25: Wert6 = 30: Wert7 = 35

With MSChart1
.chartType = VtChChartType2dPie
.ShowLegend = True

.RowCount = 3 '3 Zeilen = 3 Torten
.Row = 1: .RowLabel = "Test1" 'Beschriftung
.Row = 2: .RowLabel = "Test2" 'Beschriftung
.Row = 3: .RowLabel = "Test3" 'Beschriftung

.ColumnCount = 7 '7 Segmente insgesamt
'Legend
.Column = 1: .ColumnLabel = "Wert1 = " & Format(Wert1, "##0")
.Column = 2: .ColumnLabel = "Wert2 = " & Format(Wert2, "##0")
.Column = 3: .ColumnLabel = "Wert3 = " & Format(Wert3, "##0")
.Column = 4: .ColumnLabel = "Wert4 = " & Format(Wert4, "##0")
.Column = 5: .ColumnLabel = "Wert5 = " & Format(Wert5, "##0")
.Column = 6: .ColumnLabel = "Wert6 = " & Format(Wert6, "##0")
.Column = 7: .ColumnLabel = "Wert7 = " & Format(Wert7, "##0")

'Zuweisung der einzelnen Zeilen (Torten)
For i = 1 to RowCount
.Row = i
Select Case i
Case 1
.Column = 1: .Data = Wert1 'Torte 1, Segment 1
.Column = 2: .Data = Wert2
.Column = 3: .Data = Wert3
Case 2
.Column = 1: .Data = Wert1 'Torte 2, Segment 1
.Column = 4: .Data = Wert4
.Column = 5: .Data = Wert5
Case 3
.Column = 1: .Data = Wert1 'Torte 3, Segment 1
.Column = 6: .Data = Wert6
.Column = 7: .Data = Wert7
End Select
Next
End With

Zeile 1 wird Korrekt dargestellt.
In Zeile (Torte) 2 und 3 werden jeweils 4 Spalten (Kreissegmente)
angezeigt, obwohl nur 3 Spalten durchlaufen wurden. Lt. Farbe in der
Legende handelt es sich um die Variable Wert1. Der Anteil stimmt
natürlich auch nicht.
Was mache ich da falsch.
Vielen Dank für einen Hinweis.
gruss
 

Lesen sie die antworten

#1 Wilfried Dietrich
12/09/2008 - 11:12 | Warnen spam
Hallo Jürgen,

Dim Wert1, Wert2, Wert3, Wert4, Wert5, Wert6, Wert7 As Byte


in dem Posting zu MoveMemory hat dich Olaf schon darauf hingewiesen,
dass das in VB so nicht funktioniert.
'Dim x, y, z As Byte '< ! Vorsicht, das geht in VB nicht



Wenn du so deklarierst, dann wird Wert1...6 als Variant deklariert.
Richtig ist:
Dim Wert1 As Byte, Wert2 As Byte, ..., Wert7 As Byte

For i = 1 to RowCount 'ist nicht korrekt


korrekt: For i = 1 to .RowCount


Ändere mal deinen Code in folgenden:

Dim i As Byte 'Schleife
'für MSChart1.Data Integer deklarieren
Dim Wert1 As Integer, Wert2 As Integer, Wert3 As Integer, Wert4 As Integer
Dim Wert5 As Integer, Wert6 As Integer, Wert7 As Integer

Wert1 = 5: Wert2 = 10: Wert3 = 15
Wert4 = 20: Wert5 = 25: Wert6 = 30: Wert7 = 35

With MSChart1
.chartType = VtChChartType2dPie
.ShowLegend = True

.RowCount = 3 '3 Zeilen = 3 Torten
.Row = 1: .RowLabel = "Test1" 'Beschriftung
.Row = 2: .RowLabel = "Test2" 'Beschriftung
.Row = 3: .RowLabel = "Test3" 'Beschriftung

.ColumnCount = 7 '7 Segmente insgesamt
'Legend
.Column = 1: .ColumnLabel = "Wert1 = " & Format(Wert1, "##0")
.Column = 2: .ColumnLabel = "Wert2 = " & Format(Wert2, "##0")
.Column = 3: .ColumnLabel = "Wert3 = " & Format(Wert3, "##0")
.Column = 4: .ColumnLabel = "Wert4 = " & Format(Wert4, "##0")
.Column = 5: .ColumnLabel = "Wert5 = " & Format(Wert5, "##0")
.Column = 6: .ColumnLabel = "Wert6 = " & Format(Wert6, "##0")
.Column = 7: .ColumnLabel = "Wert7 = " & Format(Wert7, "##0")

'Zuweisung der einzelnen Zeilen (Torten)
For i = 1 To .RowCount
.Row = i
Select Case i
Case 1
.Column = 1: .Data = Wert1 'Torte 1, Segment 1
.Column = 2: .Data = Wert2
.Column = 3: .Data = Wert3
Case 2
.Column = 1: .Data = Wert1 'Torte 2, Segment 1
.Column = 2: .Data = 0
.Column = 3: .Data = 0
.Column = 4: .Data = Wert4
.Column = 5: .Data = Wert5
.Column = 6: .Data = 0
.Column = 7: .Data = 0
Case 3
.Column = 1: .Data = Wert1 'Torte 3, Segment 1
.Column = 2: .Data = 0
.Column = 3: .Data = 0
.Column = 4: .Data = 0
.Column = 5: .Data = 0
.Column = 6: .Data = Wert6
.Column = 7: .Data = Wert7
End Select
Next
End With


Allerdings würde ich eher .ChartData verwenden.
Da kannst du fast alles in einem gefüllten Datenfeld übergeben.
Schau mal in der VB-Hilfe.

Gruß
Wilfried

Ähnliche fragen