Sie: Du, ich war beim Friseur! – Er: Und – was hast du dort gemacht?

VBA-Schulung. Eine Teilnehmerin möchte mehrere Diagramme per VBA nach PowerPoint von Excel kopieren:

Wir beginnen.

Wir setzen einen Verweis auf die PowerPoint-Objektbibliothek.

Wir greifen auf PowerPoint zu und lassen das Programm anzeigen:

Sub PowerPointZugriff()
    Dim ppApp As PowerPoint.Application
    Dim ppPräsentation As PowerPoint.Presentation
    Dim ppFolie As PowerPoint.Slide
    
    Dim xlBlatt As Worksheet
    Dim i As Integer
    
    Set xlBlatt = ActiveSheet
    
    Set ppApp = New PowerPoint.Application
    ppApp.Visible = msoTrue

Klappt.

Wir erstellen eine neue Präsentation:

Set ppPräsentation = ppApp.Presentations.Add

Klappt.

Wir fügen eine neue Folie ein – eine Fehlermeldung ist die Folge:

Ich erinnere mich: VBA schlägt zwar die Methode AddSlide mit zwei Parametern vor:

Korrekt wäre jedoch die Methode Add:

Set ppFolie = ppPräsentation.Slides.Add(1, ppLayoutTitleOnly)

Und damit funktioniert das Programm:

Sub PowerPointZugriff()
    Dim ppApp As PowerPoint.Application
    Dim ppPräsentation As PowerPoint.Presentation
    Dim ppFolie As PowerPoint.Slide
    
    Dim xlBlatt As Worksheet
    Dim i As Integer
    
    Set xlBlatt = ActiveSheet
    
    Set ppApp = New PowerPoint.Application
    ppApp.Visible = msoTrue
    Set ppPräsentation = ppApp.Presentations.Add
    
    For i = 1 To xlBlatt.ChartObjects.Count
        Set ppFolie = ppPräsentation.Slides.Add(i, ppLayoutTitleOnly)
        ppFolie.Shapes(1).TextFrame.TextRange.Text = "Überschrift " & i
        xlBlatt.ChartObjects(i).Copy
        ppFolie.Shapes.Paste
    Next i
    ' Achtung: nicht AddSlides sondern Add

Das Ergebnis:

Nichts verursacht soviel Unruhe wie Menschen, die sich erholen wollen!

Eine Kollegin hat mir letzte Woche eine Excelmappe mit einem Makro geschickt. Das Makro kopiert von mehreren Tabellenblättern Bereiche und fügt sie in eine bestehende Präsentation ein.

Die Kollegin hatte ein paar Fragen zum Makro. Da ich die PowerPoint-Präsentation nicht hatte, änderte ich einige wenige Befehle. Beispielsweise „greife auf Folie 1, 2, 3 zu“ wurde geändert in: „füge eine neue Folie ein“. Der Befehl AddSlides war schnell gefunden:

20170129PP01

Allerdings erhielt ich hier einen Fehler. Nochmal nachschauen:

20170129PP02

Doch: Sildes.AddSlide. Korrekt!

20170129PP03

Ebenso die Parameter: an welcher Stelle soll eine neue Folie erzeugt werden? Welches Layout soll verwendet werden? Ebenfalls korrekt!

Mir dämmerte es. Vor gefühlten 100.000 Jahre habe ich mal PowerPoint programmiert. Und dort herausgefunden, dass die Methode nicht AddSlides heißt, sondern Add. Geändert. Tatsächlich: IntelliSense listet nun sogar die korrekten Layout-Konstanten auf.

20170129PP04

Hum – Microsoft hätte wahrlich in den letzten 15 Jahren einen so wichtigen Befehl wie „füge neue Folie ein“ korrigieren können. Oder bin ich der einzige, dem dies aufgefallen ist?