Rückkehr in VBA-Code-Beispiele

PowerPoint VBA – Makro-Beispiele und Tutorial

In this Article

Dies ist eine vollständige Anleitung zur Automatisierung von PowerPoint mit VBA-Makros (Visual Basic for Applications). Im Folgenden finden Sie viele nützliche Beispiele.


VBA PDF (kostenlose Downloads)

Laden Sie unser kostenloses Microsoft PowerPoint VBA-Tutorial herunter! Oder VBA-Tutorials für andere Office-Programme!

vba powerpoint tutorial pdf

Herunterladen


PowerPoint VBA-Tutorial (Makros)

Präsentation mit Makros speichern

Die Präsentation mit VBA-Code sollte als PowerPoint-Makro-aktivierte Präsentation (*.pptm) gespeichert werden

vba powerpoint makro aktiviert

Registerkarte ‚Entwicklertools‘ im Menüband aktivieren

Bevor Sie VBA-Code erstellen, sollten Sie die Registerkarte „Entwicklertools“ im Menüband aktivieren. Wählen Sie dazu -> Optionen, klicken Sie dann auf ‚Menüband anpassen‘ und aktivieren Sie das Kästchen neben der Registerkarte ‚Entwicklertools‘ im rechten Fensterbereich. vba powerpoint entwicklertools registerkarte

PowerPoint-Makro erstellen

Dies ist ein einfaches Beispiel für ein PowerPoint-VBA-Makro:

Sub PraesentationAlsPDF_Speichern()
    Dim pptName As String
    Dim PDFName As String
    
    ' PowerPoint als PDF speichern
    pptName = ActivePresentation.FullName
    ' PowerPoint-Dateierweiterung im Namen durch PDF ersetzen
    PDFName = Left(pptName, InStr(pptName, ".")) & "pdf"
    ActivePresentation.ExportAsFixedFormat PDFName, 2 ' ppFixedFormatTypePDF = 2
 
End Sub

Es speichert die aktive Präsentation als PDF-Datei. Jede Zeile des Codes bewirkt Folgendes:

  • Erzeugt Variablen für den PowerPoint-Namen und den PDF-Namen
  • Weist den Namen der aktuellen Präsentation der Variablen pptName zu
  • Erzeugt den vollständigen PDF-Namen
  • Speichert die Präsentation als PDF-Datei

PowerPoint-Anwendung

Wenn der VBA-Code innerhalb einer PowerPoint-Präsentation ausgeführt wird, ist die PowerPoint-Anwendung die Standardanwendung und kann ohne ausdrücklichen Verweis bearbeitet werden. Eine neue Präsentation erstellen

Um eine Präsentation zu erstellen, verwenden Sie die Methode Add der PowerPoint-Anwendung.

Application.Presentations.Add
' oder ohne expliziten Verweis
Presentations.Add

Eine neue Präsentation öffnen

Um eine neue, leere Präsentation zu öffnen, verwenden Sie die Methode Add der Sammlung Application.Presentations

Presentations.Add

Vorhandene Präsentation öffnen

Um eine Präsentation zu öffnen, die Sie bereits erstellt haben, verwenden Sie die Methode Open der Sammlung Application.Presentations

Presentations.Open ("Meine Präsentation.pptx")

Der obige Code setzt voraus, dass sich die Präsentation im selben Verzeichnis befindet wie die PowerPoint-Präsentation, die den Code enthält.

Öffnen und einer Variablen zuweisen

Sie sollten die geöffnete Präsentation einer Variablen zuweisen, damit Sie sie nach Ihren Wünschen bearbeiten können.

Dim ppt As Presentation
Set ppt = Presentations.Open("Meine Präsentation.pptx")

Auf die aktuelle Präsentation verweisen

Verwenden Sie die Referenz ActivePresentation, um die Präsentation zu bearbeiten, die in der grafischen Benutzeroberfläche aktiv ist, wenn der VBA-Code ausgeführt wird.

' Den Namen der aktuellen Präsentation in das Direktfenster drucken
Debug.Print ActivePresentation.Name

Aktuelle Präsentation speichern

Die folgende Anweisung speichert die aktuelle Präsentation, wenn sie zuvor gespeichert wurde. Wurde sie noch nicht gespeichert, werden Sie mit dem Dialog ‚Speichern unter‘ aufgefordert, sie abzuspeichern.

ActivePresentation.Save

Aktuelle Präsentation schließen

Mit der folgenden Anweisung wird die aktuelle Präsentation geschlossen, auch wenn sie nach der letzten Bearbeitung nicht gespeichert wurde.

ActivePresentation.Close

Nützliche Referenzen

Vorhandene Präsentation einer Variablen (nach Name) zuweisen

Dim meinePraesentationNachName As Presentation
Set meinePraesentationNachName = Application.Presentations("Meine Präsentation")

Aktuelle Folie einer Variablen zuweisen

Dim aktuelleFolie As Slide
Set aktuelleFolie = Application.ActiveWindow.View.Slide

Folie nach Index einer Variablen zuweisen

Dim meineFolie As Slide
Set meineFolie = ActivePresentation.Slides(11)

Anzahl der Folien zählen

Dim FolienAnzahl As Long
FolienAnzahl = ActivePresentation.Slides.Count

Folienindexnummer der aktuellen Folie ermitteln

Dim aktuelleFolieIndex As Integer
aktuelleFolieIndex = Application.ActiveWindow.View.Slide.SlideIndex

Eine leere Folie am Ende der Bildschirmpräsentation hinzufügen

Dim FolienAnzahl As Long
Dim neueFolie As Slide

FolienAnzahl = ActivePresentation.Slides.Count
Set neueFolie = ActivePresentation.Slides.Add(FolienAnzahl + 1, 12)
' oder als ppLayoutBlank = 12
Set neueFolie = ActivePresentation.Slides.Add(FolienAnzahl + 1, ppLayoutBlank)

Eine Folie nach der aktuellen hinzufügen

Dim neueFolie As Slide
Dim aktuelleFolieIndex As Integer

aktuelleFolieIndex = Application.ActiveWindow.View.Slide.SlideIndex
Set neueFolie = ActivePresentation.Slides.Add(aktuelleFolieIndex, ppLayoutBlank)

Eine Folie löschen

Dim aktuelleFolieIndex as Integer

aktuelleFolieIndex = Application.ActiveWindow.View.Slide.SlideIndex
ActivePresentation.Slides(aktuelleFolieIndex).Delete

Zu einer bestimmten Folie wechseln

' So gelangen Sie zu Folie Nummer 4
Application.ActiveWindow.View.GotoSlide(4)

Folie verschieben

Sie können eine Folie von ihrer alten Position an die neue Position verschieben

' Verschieben von Folie 3 zur ersten Stelle
Dim altePosition, neuePosition As Integer

altePosition = 3
neuePosition = 1
ActivePresentation.Slides(altePosition).MoveTo toPos:=neuePosition

 Alle Folien mit einer Schleife durchlaufen

Sie können mit jeder Folie etwas tun oder alle Folien durchgehen, um einige Folien zu finden und mit Hilfe des Codes etwas damit zu tun:

Dim meineFolie As Slide

For Each meineFolie In ActivePresentation.Slides
   ' Etwas mit der aktuellen Folie tun, auf die in der Variablen 'meineFolie' verwiesen wird
   ' Debug.Print meineFolie.Name
Next meineFolie

Alle Formen der aktiven Folie mit einer Schleife durchlaufen

Die Leistungsfähigkeit von PowerPoint kann durch die Verwendung von ‚Formen‘ realisiert werden. Der folgende Code durchläuft alle Formen auf der aktuellen Folie in einer Schleife, so dass Sie sie nach Belieben bearbeiten können;

Dim aktuelleFolie As Slide
Dim Form As Shape

Set aktuelleFolie = Application.ActiveWindow.View.Slide
For Each Form In aktuelleFolie.Shapes
  ' Etwas mit der aktuellen Form tun, auf die in der Variablen 'Form' verwiesen wird
  ' Zum Beispiel den Namen der Form im Direktfenster ausgeben
  Debug.Print Form.Name
Next Form

Alle Formen in allen Folien mit einer Schleife durchlaufen

Sie können alle Formen in der Präsentation durchlaufen, indem Sie eine Schleife hinzufügen, die durch alle Folien geht.

Dim aktuelleFolie As Slide
Dim Form As Shape

For Each aktuelleFolie In ActivePresentation.Slides
  For Each Form In aktuelleFolie.Shapes
    ' Etwas mit der aktuellen Form tun, auf die in der Variablen 'Form' verwiesen wird
    Debug.Print Form.Name
  Next Form
Next aktuelleFolie

Alle Textfelder der aktuellen Folie mit einer Schleife durchlaufen

Textfelder sind die am häufigsten verwendeten Formen in PowerPoint-Präsentationen. Sie können  alle Textfelder durchlaufen, indem Sie ein Häkchen bei ‚Shape Type‘ setzen. Bei Textfeldern ist der Formtyp als VBA-Konstante msoTextBox definiert (der numerische Wert der Konstante ist 17).

Dim aktuelleFolie As Slide
Dim Form As Shape

Set aktuelleFolie = Application.ActiveWindow.View.Slide
For Each Form In aktuelleFolie.Shapes
  ' Prüfen, ob der Formtyp msoTextBox ist 
  If Form.Type = 17 Then ' msoTextBox = 17
    ' Den Text im Textfeld drucken
    Debug.Print Form.TextFrame2.TextRange.Text
  End If
Next Form

Alle Textfelder in allen Folien mit einer Schleife durchlaufen

Auch hier können Sie eine Schleife durch alle Textfelder in der Präsentation ausführen, indem Sie eine Schleife hinzufügen, die alle Folien durchläuft.

Dim aktuelleFolie As Slide 
Dim Form As Shape

For Each aktuelleFolie In ActivePresentation.Slides
  For Each Form In aktuelleFolie.Shapes
    ' Prüfen, ob der Formtyp msoTextBox ist 
    If Form.Type = 17 Then ' msoTextBox = 17
      ' Etwas mit dem Textfeld tun, auf das in der Variablen 'Form' verwiesen wird
      Debug.Print Form.TextFrame2.TextRange.Text
    End If
  Next Form
Next aktuelleFolie

Ausgewählte Folien in eine neue PPT-Präsentation kopieren

Um bestimmte Folien in eine neue Präsentation zu kopieren, wählen Sie zunächst die gewünschten Folien in der vorhandenen Präsentation aus und führen Sie dann den folgenden Code aus;

Dim aktuellePraesentation As Presentation
Dim aktuelleFolie As Slide
Dim neuePraesentation As Presentation

' Verweis auf die aktuelle Präsentation speichern
Set aktuellePraesentation = Application.ActivePresentation

' Verweis auf die aktuelle Folie speichern
Set aktuelleFolie = Application.ActiveWindow.View.Slide

' Neue Präsentation hinzufügen und in einer Referenz speichern
Set neuePraesentation = Application.Presentations.Add

' Ausgewählte Folien kopieren
Selection.Copy

' In neue Präsentation einfügen
neuePraesentation.Slides.Paste

Aktuelle Folie an das Ende der aktuellen Präsentation kopieren

' Aktuelle Folie kopieren
Application.ActiveWindow.View.Slide.Copy

' Am Ende einfügen
ActivePresentation.Slides.Paste

Nützliche PowerPoint-Makro-Beispiele

Hier finden Sie einige nützliche Makro-Beispiele, die zeigen, wie Sie Aufgaben erledigen können. Diese veranschaulichen auch die oben beschriebenen Konzepte.

Folie während der Bildschirmpräsentation wechseln

Sub Folie_Waehrend_BildschirmPraesentation_Wechseln()
    Dim FolienIndex As Integer
    Dim FolienIndexVorher As Integer
 
    ' Während der Bildschirmpräsentation von der aktuellen Folie in die ausgewählte Folie 4 springen
    FolienIndex = 4
    ' Index des aktuellen Bildschirmpräsentationsfensters ist 1 in der SlideShowWindows-Sammlung
    FolienIndexVorher = SlideShowWindows(1).View.CurrentShowPosition
    SlideShowWindows(1).View.GotoSlide FolienIndex
     
End Sub

Schriftart auf allen Folien in allen Textfeldern ändern

Sub SchriftartInAllenFolienAendern()
    Dim meineFolie As Slide
    Dim Form As Shape
    
    ' Schriftgröße auf allen Folien ändern
    For Each meineFolie In ActivePresentation.Slides
      For Each Form In meineFolie.Shapes
        If Form.Type = 17 Then ' msoTextBox = 17
          ' Schriftgröße auf 24 ändern
          Form.TextFrame.TextRange.Font.Size = 24
        End If
      Next Form
    Next meineFolie
 
End Sub

Groß-/Kleinschreibung in allen Textfeldern ändern

Sub WechselGrossZuNormalschreibung()
    Dim meineFolie As Slide
    Dim Form As Shape
    
    ' Wechsel von Groß- zu Normalschreibung für alle Folien
    For Each meineFolie In ActivePresentation.Slides
      For Each Form In meineFolie.Shapes
        If Form.Type = 17 Then ' msoTextBox = 17
          ' Großbuchstaben in Normalbuchstaben umwandeln
          Form.TextFrame2.TextRange.Font.Allcaps = False
        End If
      Next Form
    Next meineFolie
 
End Sub

Umschalten zwischen Groß- und Kleinschreibung in allen Textfeldern

Sub UmschaltenZwischenGrossUndKleinschreibung()
    Dim meineFolie As Slide
    Dim Form As Shape
 
    ' Umschalten zwischen Groß- und Normalschreibung für alle Folien
    For Each meineFolie In ActivePresentation.Slides
      For Each Form In meineFolie.Shapes
        If Form.Type = 17 Then ' msoTextBox = 17
          ' Umschalten zwischen Groß- und Kleinbuchstaben
          Form.TextFrame2.TextRange.Font.Allcaps = _
            Not Form.TextFrame2.TextRange.Font.Allcaps
        End If
      Next Form
    Next meineFolie
 
End Sub

Unterstreichungen von Unterlängen entfernen

In der Typografie ist ein Unterlängenzeichen der Teil eines Buchstabens, der unterhalb der Grundlinie einer Schriftart liegt. In den meisten Schriftarten sind Unterlängen für Kleinbuchstaben wie g, j, q, p, y und manchmal f reserviert.

Wenn Sie den Text unterstreichen, sieht er unter Unterlängen nicht schön aus. Hier ist der Code, um die Unterstreichungen von allen Zeichen g, j, p, q und y in der gesamten Präsentation zu entfernen.

Sub UnterstricheVonUnterlaengenEntfernen()
    Dim meineFolie As Slide
    Dim Form As Shape
    Dim unterlaengen_liste As String
    Dim Satz As String
    Dim x As Long
    
    ' Unterstriche aus Unterlängen entfernen
    unterlaengen_liste = "gjpqy"
    For Each meineFolie In ActivePresentation.Slides
      For Each Form In meineFolie.Shapes
        If Form.Type = 17 Then ' msoTextBox = 17
         ' Unterstriche der Buchstaben "gjpqy" entfernen
         With Form.TextFrame.TextRange
            Satz = .Text
           For x = 1 To Len(.Text)
             If InStr(unterlaengen_liste, Mid$(Satz, x, 1)) > 0 Then
              .Characters(x, 1).Font.Underline = False
             End If
           Next x
         End With
       End If
      Next Form
    Next meineFolie
 
End Sub

Animationen von allen Folien entfernen

Verwenden Sie den folgenden Code, um alle in einer Präsentation festgelegten Animationen zu entfernen.

Sub AnimationenAusAllenFolienEntfernen()
    Dim meineFolie As Slide
    Dim i As Long
 
    For Each meineFolie In ActivePresentation.Slides
      For i = meineFolie.TimeLine.MainSequence.Count To 1 Step -1
       'Jede Animation entfernen
       meineFolie.TimeLine.MainSequence.Item(i).Delete
      Next i
    Next meineFolie
     
End Sub

Präsentation als PDF speichern

Sie können die aktuelle Präsentation ganz einfach im PDF-Format speichern.

Sub PraesentationAlsPDF_Speichern()
    Dim pptName As String
    Dim PDFName As String
    
    ' PowerPoint als PDF speichern
    pptName = ActivePresentation.FullName
    ' PowerPoint-Dateierweiterung im Namen durch PDF ersetzen
    PDFName = Left(pptName, InStr(pptName, ".")) & "pdf"
    ActivePresentation.ExportAsFixedFormat PDFName, 2 ' ppFixedFormatTypePDF = 2
 
End Sub

Suchen und Ersetzen von Text

Sie können Texte in allen Textfeldern aller Folien suchen und ersetzen. Nach der ersten Instanz des zu suchenden Textes (definiert durch suchtext) müssen Sie den Find-Befehl in einer Schleife durchlaufen lassen, um weitere Instanzen zu finden, falls vorhanden.

Sub TextFindenUndErsetzen()
    Dim meineFolie As Slide
    Dim Form As Shape
    Dim suchtext As String
    Dim ersatztext As String
    Dim FormTxt As TextRange
    Dim TmpTxt As TextRange

    suchtext = "Schakal"
    ersatztext = "fuchs"
     
    ' Suchen und finden und Ersetzen
    For Each meineFolie In ActivePresentation.Slides
      For Each Form In meineFolie.Shapes
        If Form.Type = 17 Then ' msoTextBox = 17
          Set FormTxt = Form.TextFrame.TextRange
          'Erste Instanz der Variablen "suchtext" finden (falls vorhanden)
          Set TmpTxt = ShpTxt.Replace(suchtext, _
             Replacewhat:=ersatztext, _
             WholeWords:=True)
     
          'Alle weiteren Instanzen der Varialbe "suchtext" suchen (falls vorhanden)
          Do While Not TmpTxt Is Nothing
            Set FormTxt = FormTxt.Characters(TmpTxt.Start + TmpTxt.Length, FormTxt.Length)
            Set TmpTxt = FormTxt.Replace(suchtext, _
              Replacewhat:=ersatztext, _
              WholeWords:=True)
          Loop
        End If
      Next Form
    Next meineFolie
 
End Sub

Folie als Bild exportieren

Sie können die aktuelle Folie (oder jede andere Folie) als PNG-, JPG- (JPEG) oder BMP-Bild exportieren.

Sub FolieAlsBildExportieren()
    Dim BildTyp As String
    Dim pptName As String
    Dim BildName As String
    Dim meineFolie As Slide
    
    ' Aktuelle Folie als Bild exportieren
    BildTyp = "png" ' oder jpg oder bmp
    pptName = ActivePresentation.FullName
    BildName = Left(pptName, InStr(pptName, ".")) & BildTyp
    Set meineFolie = Application.ActiveWindow.View.Slide
    meineFolie.Export BildName, BildTyp
 
End Sub

Bildgröße so ändern, dass es die gesamte Folie abdeckt

Sub BildAnFoliengroesseAnpassen()
    Dim meineFolie As Slide
    Dim Form As Shape
    
 
    ' Bild auf die volle Foliengröße skalieren
    ' Höhe und Breite der ersten Form auf der aktuellen Folie ändern
    ' an die Abmessungen der Folie anpassen
    Set meineFolie = Application.ActiveWindow.View.Slide
    Set Form = meineFolie.Shapes(1)
    ''
    '' Ersetzen Sie die beiden obigen Anweisungen durch
    '' die folgende Anweisung, wenn Sie
    '' die aktuell ausgewählte Form erweitern wollen
    '' gibt einen Fehler, wenn nichts ausgewählt ist
    '' Set Form = ActiveWindow.Selection.ShapeRange(1)
     
    With Form
        .LockAspectRatio = False
        .Height = ActivePresentation.PageSetup.SlideHeight
        .Width = ActivePresentation.PageSetup.SlideWidth
        .Left = 0
        .Top = 0
    End With
 
End Sub

Beenden aller laufenden Bildschirmpräsentationen

Wenn Sie mehrere Bildschirmpräsentationen gleichzeitig geöffnet haben, können Sie sie alle mit dem folgenden Makro schließen.

Sub AlleLaufendenPraesentationenBeenden()
 
    Do While SlideShowWindows.Count > 0
        SlideShowWindows(1).View.Exit
    Loop
 
End Sub

PowerPoint von Excel aus automatisieren

Sie können auch über andere Anwendungen (wie Excel und Word) eine Verbindung zu PowerPoint herstellen. Als ersten Schritt müssen Sie auf eine Instanz von PowerPoint verweisen. Es gibt zwei Möglichkeiten, dies zu tun: die frühe Bindung und die späte Bindung.

PowerPoint öffnen – Frühe Bindung

Bei der ‚Frühen Bindung‘ müssen Sie im VBE (Visual Basic Editor) über die Option Extras->Verweise explizit einen Verweis auf ‚Microsoft PowerPoint 16 Object Library‘ (für MS Office 2019) setzen.

' Frühe Bindung
Dim pptApp As Application
Set pptApp = New PowerPoint.Application

PowerPoint öffnen – Späte Bindung

Bei der ‚Späten Bindung‘ wird die Anwendungsvariable als Objekt deklariert und die VBA-Maschine verbindet sich zur Laufzeit mit der richtigen Anwendung.

' Späte Bindung
Dim pptApp As Object
Set pptApp = CreateObject("PowerPoint.Application")

Anwendung sichtbar machen

Nachdem Sie den Verweis auf die PowperPoint-Anwendung gesetzt haben, müssen Sie sie möglicherweise sichtbar machen.

pptApp.Visible = True

PowerPoint bearbeiten

Sie können alle oben beschriebenen Methoden zur Bearbeitung von Präsentationen in PowerPoint von Excel aus verwenden, indem Sie einfach den oben erstellten Verweis auf PowerPoint hinzufügen. Zum Beispiel

Presentation.Open ("Meine Präsentation.pptx")

muss wie folgt verwendet werden

pptApp.Presentations.Open ("Meine Präsentation.pptx")

Schließen Sie die Anwendung

Wenn Sie Ihre Arbeit mit der PowerPoint-Anwendung abgeschlossen haben, müssen Sie sie schließen und sollten die Referenz wieder freigeben.

pptApp.Quit
Set pptApp = Nothing

Kopieren von Excel nach PowerPoint

Dieser Code wird einen Bereich von Excel nach PowerPoint kopieren:

Hinweis: Er wurde so einfach wie möglich gehalten, um zu zeigen, wie ein Bereich aus Excel mit VBA nach PowerPoint kopiert werden kann.

Sub KopierenVonExcelNachPowerPoint()

' Neue PowerPoint-Instanz öffnen
Set pptApp = CreateObject("PowerPoint.Application")

With pptApp
    ' Eine neue Präsentation erstellen
    Set ppt = .Presentations.Add
    ' Eine leere Folie hinzufügen
    Set neueFolie = ppt.Slides.Add(1, 12) ' ppLayoutBlank = 12
    ' Bereich vom aktiven Blatt in Excel kopieren
    ActiveSheet.Range("A1:E10").Copy
    ' In Powerpoint als Bild einfügen
    neueFolie.Shapes.PasteSpecial DataType:=2 '2 = ppPasteEnhancedMetafile
    ' Zu Powerpoint wechseln
    ' .Activate
End With

End Sub

PowerPoint VBA-FAQs

Was sind Makros in PPT?

Ein Makro ist ein allgemeiner Begriff, der sich auf eine Reihe von Programmieranweisungen zur Automatisierung von Aufgaben bezieht. PowerPoint (PPT)-Makros automatisieren Aufgaben in PowerPoint unter Verwendung der Programmiersprache VBA.

Wie verwende ich VBA in PowerPoint?

Um VBA in PowerPoint zu verwenden, öffnen Sie den VBA-Editor (ALT + F11 oder Entwicklertools > Visual Basic).

Wie erstelle ich ein Makro in PowerPoint?

1. Öffnen Sie den VBA-Editor (ALT + F11 oder Entwicklertools > Visual Basic)

2. Gehen Sie zu Einfügen > Modul, um ein Code-Modul zu erstellen

3. Geben Sie ‚Sub HelloWorld‘ ein und drücken Sie Enter

4. Zwischen den Zeilen ‚Sub HelloWorld()‘ und ‚End Sub‘ geben Sie ‚MsgBox „Hello World!“ ein

5. Sie haben ein Makro erstellt!

6. Drücken Sie nun ‚F5‘, um das Makro auszuführen

Geschrieben von: Vinamra Chandra