PowerPoint – Folien-Template per Knopfdruck einfügen

Wer viele Präsentationen mit Microsoft PowerPoint baut, kennt das: Ein gutes Folienlayout kann immer wieder verwendet werden. Sei es eine bestimmte Anordnung von Shapes und Textboxen (wie der Klassiker „Zweispalter“ mit Überschriften, Textboxen, einem Pfeil) oder schön formatierte Tabellen. 

Hierzu bietet es sich an die gewünschten Slide-Layouts in einer Datei (bspw. Templates.pptx) abzuspeichern. In dieser Datei sollten auf den Folien jeweils nur die zu kopierenden Shapes/Elemente vorhanden sein, d.h. kein Titel o.ä. auf den Slides. Mit einem einfachen Makro (getShapesFromTemplate) können nun die Elemente jeweils von einer bestimmten Seite (Parameter fromSlide) im Template auf die aktuelle Seite in der gerade geöffneten Präsentation kopiert werden:

Hinweis: Die gezeigte Fassung des Macros hat kein Error-Handling, so dass Fehler (bspw. Anforderung einer nicht vorhandenen Slide, falscher Pfad für die Datei, usw.) nicht abgefangen werden. Verwendung auf eigene Gefahr!

Private Sub getShapesFromTemplate(fromSlide As Long)
    Dim presentationWithTemplates As Presentation

    Set presentationWithTemplates = Application.Presentations.Open("PFAD-JEWEILS-ANZUPASSEN/Templates.pptx", msoCTrue, msoFalse)

    presentationWithTemplates.Slides(fromSlide).Shapes.Range.Copy
    presentationWithTemplates.Close
    Set presentationWithTemplates = Nothing

    ActiveWindow.View.Slide.Shapes.Paste

End Sub

Public Sub getShapes1()
    getShapesFromTemplate (1)
End Sub

Public Sub getShapes2()
    getShapesFromTemplate (2)
End Sub

Der Aufruf erfolgt dann wie im Beispiel gezeigt über weitere öffentliche Funktionen (im Bespiel getShapes1 und getShapes2). Diese können dann für den schnellen Zugriff bspw. auf Schaltflächen oder Ribbon-Elemente gelegt werden.

Templates.pptx:

Shapes einfügen per Makro:


Noch etwas Hintergrund:
Die Vorlage ist notwendig, da PowerPoint keine Objekte/Shapes per Macro serialisieren und wieder einfügen kann. Die Alternative wäre jede Eigenschaft eines Objektes einzeln auszulesen, zu speichern und dann neue Objekte auf Basis der Werte wieder per VBA zu erzeugen. Im Vergleich ist dann Copy&Paste per Makro einfacher