Daten und Datenbereich für Diagramm aktualiseren

  • PowerPoint

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Daten und Datenbereich für Diagramm aktualiseren

    Hallo zusammen,

    mit dem folgenden Code verändere ich die Daten hinter einem Diagramm in Powerpoint. Das Diagramm ist auf der 2. Folie und hat den Shapenamen Dia2. Leider werden die Daten nicht in das Diagramm übernommen.

    Visual Basic-Quellcode

    1. Sub test1()
    2. Dim chrt As Chart
    3. Dim wbChart As New Workbook
    4. Dim wsChart As New Worksheet
    5. Dim sh As Shape
    6. With ActivePresentation.Slides(2)
    7. For Each sh In .Shapes
    8. If sh.Name = "Dia2" Then Exit For
    9. Next
    10. End With
    11. Set chrt = sh.Chart
    12. chrt.ChartData.Activate
    13. Set wbChart = chrt.ChartData.Workbook
    14. Set wsChart = wbChart.Worksheets(1)
    15. wsChart.Range("A2").Value = "North"
    16. wsChart.Range("A3").Value = "South"
    17. wsChart.Range("A4").Value = "East"
    18. wsChart.Range("A5").Value = "West"
    19. wsChart.Range("B1").Value = "2009"
    20. wsChart.Range("C1").Value = "2010"
    21. wsChart.Range("D1").Value = "2011"
    22. wsChart.ListObjects("Tabelle1").Resize wsChart.Range("A1:e6")
    23. wsChart.Range("A6").Value = "Canada"
    24. wsChart.Range("B6").Value = "5"
    25. wsChart.Range("C6").Value = "4"
    26. wsChart.Range("D6").Value = "3"
    27. wsChart.Range("E1").Value = "2012"
    28. wsChart.Range("E2").Value = "4"
    29. wsChart.Range("E3").Value = "5"
    30. wsChart.Range("E4").Value = "2"
    31. wsChart.Range("E5").Value = "3"
    32. wsChart.Range("E6").Value = "6"
    33. wbChart.Close
    34. sh.Chart.SetSourceData ("='Tabelle1'!$A$1:$E$6")
    35. sh.Chart.Refresh
    36. End Sub


    Die Zeilen 44 und 45 werden irgendwie nicht umgesetzt.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „INOPIAE“ ()

    Habe da keine Erfahrung und ohne Beispielmappe fehlt mir die Motivation das nachzubauen. Ist da eine Excel-Datei im Powerpoint eingebunden?

    Visual Basic-Quellcode

    1. Dim wbChart As New Workbook
    2. Dim wsChart As New Worksheet
    3. Set wbChart = chrt.ChartData.Workbook
    4. Set wsChart = wbChart.Worksheets(1)


    wieso NEW, wenn die später zugeordnet werden?

    Visual Basic-Quellcode

    1. wbChart.Close

    Kannte ich nocht nicht. Ich nehme dann immer

    Visual Basic-Quellcode

    1. Set wbChart = Nothing


    Visual Basic-Quellcode

    1. Set chrt = sh.Chart

    belegt sh.chart. Wird aber später nicht mehr freigegeben. Möglich dass dann

    Visual Basic-Quellcode

    1. sh.Chart.SetSourceData ("='Tabelle1'!$A$1:$E$6")
    2. sh.Chart.Refresh

    Probleme bekommt.
    Wieso nicht

    Visual Basic-Quellcode

    1. chrt.SetSourceData ("='Tabelle1'!$A$1:$E$6")
    2. chrt.refresh
    3. set chrt = nothing

    ?
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Im Object-Model von PPT 2010 werden bei einem Diagramm die Daten in einer interen Exceltabelle abgelegt.
    Hier brauchst Du zum testen nicht nachzubauen. Einfach in Powerpoint den Code reinkopieren. Natürlich muss noch der Verweis auf das Excel-Object-Modell gesetzt werden.

    Das NEW wird nicht benötigt.

    wbkChart.close hat definitiv ein anderes Verhalten als Set wkbChart = Nothing

    Mit dem Close Befehl wird die "interne" Excel-Datei geschlossen. Mit set wkbChart= Nothing wird nur der Speicher freigegeben, die "Excel-Anwendung" bleibt aber geöffnet.

    Wenn das Refresh und das SetSource vor den Close-Befehl setze geht es.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Ah. Also gelöst. Stimmt, das Close schließt die "Datei" wieder. Habe bisher noch nie mit Powerpoint-VBA gearbeitet. Mache damit immer nur meine undynamischen Präsentationen. Ist aber mal eine Idee um sich bissel von der Masse abzuheben. 8-)
    Gruß
    Peterfido

    Keine Unterstützung per PN!