Diagramm lässt sich aus Array NICHT erstellen

  • Excel

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ereza.

    Diagramm lässt sich aus Array NICHT erstellen

    Hallo liebes Forum,

    ich bin dabei ein Programm zu schreiben, wo unter anderem, ein Diagramm automatisch erstellt werden soll. Da ich leider keinen Range-Bereich nutzen kann und stattdessen einzelne Werte verwenden muss, möchte ich diese Werte gezielt in ein Array schreiben und dieses dann für das Diagramm verwenden. Hier folgender Auszug von meiner Entwicklung bisher:

    Visual Basic-Quellcode

    1. '-------------------------------------------------------------------------
    2. ' - Neues Workbook generieren... -
    3. '-------------------------------------------------------------------------
    4. Dim wbMutter As Workbook
    5. Dim wbNeu As Workbook
    6. Dim wsAusgabeNeu As Worksheet
    7. Dim wsTabelle1Neu As Worksheet
    8. 'kopiere Ausgabe Worksheet von Quelldatei(wbMutter) in sich neu-generierendes Workbook...
    9. Set wbMutter = ThisWorkbook
    10. Set wbNeu = Workbooks.Add
    11. wbMutter.Worksheets(3).Copy before:=wbNeu.Worksheets(wbNeu.Worksheets.Count)
    12. '-------------------------------------------------------------------------
    13. ' - Erstellung der Charts....... -
    14. '-------------------------------------------------------------------------
    15. 'mache Tabelle "Ausgabe" im neuen Worksheet über Variable adressierbar...
    16. Set wsAusgabeNeu = wbNeu.Worksheets("Ausgabe")
    17. Set Grafik1 = wbNeu.Charts.Add(after:=wsAusgabeNeu)
    18. 'Grafik: Belegte Betten - Monatsdurchschnitt Klinik gesamt
    19. For indx = 1 To UnikateJahreszahlenSack.Count
    20. UnikateJahreszahlenSackItem = UnikateJahreszahlenSack.Item(indx)
    21. Grafik1.SeriesCollection.NewSeries
    22. Grafik1.SeriesCollection(indx).Name = UnikateJahreszahlenSackItem
    23. ZeilenMax_Tab3 = wsAusgabeNeu.Cells(Rows.Count, 3).End(xlUp).Row
    24. SpaltenMax_Tab3 = wsAusgabeNeu.Cells(Columns.Count, 2).End(xlUp).Row + 1
    25. For indx2 = 1 To ZeilenMax_Tab3
    26. indx3 = indx2 - 1
    27. If indx2 > 1 Then
    28. If wsAusgabeNeu.Cells(indx2, 3) = "gesamt" And wsAusgabeNeu.Cells(indx3, 2) = UnikateJahreszahlenSackItem Then
    29. Grafik1.SeriesCollection(indx).Values = wsAusgabeNeu.Range(wsAusgabeNeu.Cells(indx2, 5), wsAusgabeNeu.Cells(indx2, SpaltenMax_Tab3))
    30. Grafik1.SeriesCollection(indx).XValues = wsAusgabeNeu.Range(wsAusgabeNeu.Cells(2, 5), wsAusgabeNeu.Cells(2, SpaltenMax_Tab3))
    31. Else
    32. End If
    33. Else
    34. End If
    35. Next
    36. Next
    37. 'Grafik formatieren...
    38. Grafik1.ApplyLayout (3)
    39. Grafik1.ChartTitle.Text = "Alle Kliniken, belegte Betten - Monatsdurchschnitt:" & vbCrLf & UnikateJahreszahlenSack.Item(1) & "-" & UnikateJahreszahlenSack.Item(UnikateJahreszahlenSack.Count)
    40. 'Grafik: Belegte Betten - Monatsdurchschnitt Klinik gesamt
    41. Set wsTabelle1Neu = wbNeu.Worksheets("Tabelle1")
    42. Set Grafik2 = wbNeu.Charts.Add(before:=wsTabelle1Neu)
    43. ReDim Array1DFürDiagrammXWerte(1 To UnikateJahreszahlenSack.Count)
    44. ReDim Array1DFürDiagrammYWerte(1 To UnikateJahreszahlenSack.Count)
    45. For indx = 1 To UnikateJahreszahlenSack.Count
    46. UnikateJahreszahlenSackItem = UnikateJahreszahlenSack.Item(indx)
    47. 'Befüllung der Y-Werte...
    48. For indx2 = 1 To ZeilenMax_Tab3
    49. indx3 = indx2 - 1
    50. If indx2 > 1 Then
    51. If wsAusgabeNeu.Cells(indx2, 3) = "gesamt" And wsAusgabeNeu.Cells(indx3, 2) = UnikateJahreszahlenSackItem Then
    52. Array1DFürDiagrammYWerte(indx) = wsAusgabeNeu.Cells(indx2, 4)
    53. Else
    54. End If
    55. Else
    56. End If
    57. Next
    58. Array1DFürDiagrammXWerte(indx) = UnikateJahreszahlenSackItem
    59. Next
    60. 'Grafik2.SeriesCollection(1).Name = wsAusgabeNeu.Cells(3, 1)
    61. Grafik2.SeriesCollection(1).Values = Array1DFürDiagrammYWerte
    62. Grafik2.SeriesCollection(1).XValues = Array1DFürDiagrammXWerte
    63. 'Schalte automatische Berechnung wieder ein...
    64. Application.Calculation = xlCalculationAutomatic
    65. 'Schalte automatische Bildschirmaktualisierung wieder ein...
    66. Application.ScreenUpdating = True


    Der Compiler bleibt hier hängen:

    Visual Basic-Quellcode

    1. 'Grafik2.SeriesCollection(1).Name = wsAusgabeNeu.Cells(3, 1)
    2. Grafik2.SeriesCollection(1).Values = Array1DFürDiagrammYWerte


    Als Fehler spuckt er mir:

    Laufzeitfehler '1004': Der Parameter ist ungültig.

    aus...

    Anscheinend hat er ein Problem dass ich hier Grafik2.SeriesCollection(1).Values ein Array als Werte zuweise. Das müsste aber laut Internet-Recherche auf jeden Fall gehen! - Deshalb verstehe ich ehrlich gesagt nicht, warum er das nicht mag. Die Arrays für die Werte sind übrigens auch alle korrekt befüllt (siehe Screenshot) - also Werte müsste er auch zur Verfügung haben.

    Kann mir einer von euch vielleicht weiterhelfen und mir erklären warum er mir hier einen Fehler ausgibt?

    Vielen Dank und liebe Grüße!

    *Code-Tags korrigiert*
    Bilder
    • screenshot1.JPG

      147,52 kB, 1.223×971, 83 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Habe soeben selber den Fehler gefunden, da ich den Code (neuer Tag, neues Glück, nochmals durchgegangen bin...)

    Visual Basic-Quellcode

    1. ​Grafik2.SeriesCollection.NewSeries


    hat gefehlt!! - Ohne der Anweisung geht's natürlich nicht ;)