Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Automatische ppt's aus Excel mit VBA

Automatische ppt's aus Excel mit VBA
Dirk
Hallo zusammen!!
Ich möchte aus Excel einen Textbereich als neue ppt-Präsentation erstellen.
Den nachstehenden Code habe ich mir aus dem www gesucht:
Sub PowerPoint_Export()
'Dim app As New PowerPoint.Application
'für Autovervollständigung
Dim app As Object
Dim Slide As Object
Set app = CreateObject("PowerPoint.Application")
app.Visible = True
app.Presentations.Add
app.ActivePresentation.Slides.Add 1, ppLayoutBlank
'erstelle neue PP Presentation und füge ein leeres Blatt ein
Sheets("Tabelle1").Range("A1:H30").CopyPicture
'makiere einen bestimmten Bereich als Bild
Set Slide = app.ActivePresentation.Slides(1)
Slide.Shapes.Paste
'füge den makierten Bereich in der neuen PP Presentation ein
End Sub
Bei der Ausführung kommt die Fehlermeldung: 'Slides.add: Invalid enumeration value' und in Powerpoint kommt der Hinweis, dass ich zum Erstellen der ersten Folie klicken soll.
Hat jemand eine Idee, wie ich den Code anpassen muss?
Vielen Dank schonmal
Dirk
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Automatische ppt's aus Excel mit VBA
22.06.2011 08:53:50
Dirk
Hallo Dirk,
hier mal ein Makro zur Verwendung. Du must bei Aufruf des Makros die noetigen Variablen entsprechend versorgen. Beim Speicherpfad musst Du entsprechend Deinen beduerfnissen anpassen.
Laeuft unter 2003 und 2007. Alles in ein Modul kopieren.
Public PPApp As PowerPoint.Application
Public PPPres As PowerPoint.Presentation
Public PPSlide As PowerPoint.Slide, PPFileName
Sub ExcelToNewPP(MyTemplate As String, MyRange As Range, Slide As Long, last As Boolean)
If Slide = 1 Then
'Dim PPApp As PowerPoint.Application
'Dim PPPres As PowerPoint.Presentation
'Dim PPSlide As PowerPoint.Slide, PPFileName
Dim SD As String, MyTop As Long, MyLeft As Long, Shp As PowerPoint.Shape
Dim ShpRange As PowerPoint.ShapeRange, MyWidth As Long, xfact, Yfact
Dim SLideH As Long, SlideW As Long, SlideRatio, PictRatio
Dim PictWidth As Long, PictHeight As Long
Dim ShpArr(10), i As Long
' Create instance of PowerPoint
Set PPApp = CreateObject("Powerpoint.Application")
' For automation to work, PowerPoint must be visible
PPApp.Visible = True
' Create a presentation
Set PPPres = PPApp.Presentations.Open(MyTemplate, untitled:=msoTrue)
'MyTemplate , untitled:=msoTrue
' Some PowerPoint actions work best in normal slide view
PPApp.ActiveWindow.ViewType = ppViewSlide
' Add first slide to presentation
Set PPSlide = PPPres.Slides(2)
'PPApp.ActiveWindow.Presentation.ApplyTemplate MyTemplate
Else
' Reference existing instance of PowerPoint
Set PPApp = GetObject(, "Powerpoint.Application")
' Reference active presentation
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = 1
' Reference active slide
Set PPSlide = PPPres.Slides _
(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
PPSlide.Select
End If
'clean template slide of old report data
PPSlide.Select
If Slide = 1 Then
PPSlide.Shapes.Range.Delete
End If
'copy the selected range
Worksheets(MyRange.Parent.Name).Range(MyRange.Address).Select
Worksheets(MyRange.Parent.Name).Range(MyRange.Address).CopyPicture Appearance:=xlScreen,  _
Format:=xlPicture
' Paste the range
PPSlide.Shapes.Paste.Select
'name shape for reference
PPApp.ActiveWindow.Selection.ShapeRange.Name = "Pic" & Slide
'check if pasted picture already exist
If Slide > 1 Then
MyTop = PPSlide.Shapes("Pic" & Slide - 1).Top
MyLeft = PPSlide.Shapes("Pic" & Slide - 1).Left + PPSlide.Shapes("Pic" & Slide - 1). _
Width
' Align the pasted range
PPSlide.Shapes("Pic" & Slide).Top = MyTop
PPSlide.Shapes("Pic" & Slide).Left = MyLeft
Else
' Align the pasted range
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
End If
If last = False Then
Exit Sub
End If
'adjust the position and size of the pictures on the slide, first get width of pictures
For i = 1 To Slide
PictWidth = PictWidth + PPSlide.Shapes("Pic" & i).Width
ShpArr(i) = PPSlide.Shapes("Pic" & i).Name
Next i
PictHeight = PPSlide.Shapes("Pic" & Slide).Height
PictRatio = PictWidth / PictHeight
SlideW = PPApp.ActiveWindow.Presentation.PageSetup.SlideWidth - 30
SLideH = PPApp.ActiveWindow.Presentation.PageSetup.SlideHeight - 40
SlideRatio = (SlideW / SLideH)
xfact = (SlideW - 30) / PictWidth   'scaling factor
With PPSlide.Shapes
.Range(ShpArr).Group.Select
End With
If xfact 
Lass' uns wissen, ob ok.
Gruss
Dirk aus Dubai
Anzeige
AW: Automatische ppt's aus Excel mit VBA
22.06.2011 10:00:49
Dirk
Hallo Dirk,
vielen Dank für die Antwort.
Ich habe jetzt alles in ein Modul kopiert.
Das erste Problem tritt auf, dass ich das Makro in der Aufrufliste nicht finde. Erst wenn ich
Sub ExcelToNewPP () nenne erscheint es.
Beim Starten kommt in der nachstenden Zeile der Hinweis
PPApp As PowerPoint.Application : Benutzerdefinierter Typ nicht definiert. Hängt wahrscheinlich mit den ersten drei Zeilen oben zusammen (Public ...). Wo muss ich die erfassen?
Ich bin noch ziemlicher Laie und muss daher nochmal nachfragen.
Vielen Dank schonmal
Dirk aus Hessen
Anzeige
AW: Automatische ppt's aus Excel mit VBA
22.06.2011 13:26:17
Dirk
Hallo!
Die ersten 3 Zeilen in ein Modul als erste Zeilen einfuegen.
Damit definierst Du Globale Variablen, welche nach beenden des Makros ihre Werte behalten.
Du kannst aber auch einfach die Hochkommas vor den Kommandos im Makro entfernen.
Gruss
Dirk aus Dubai
AW: Automatische ppt's aus Excel mit VBA
24.06.2011 16:17:17
Dirk
Hallo Dirk,
ich denke, mein Problem besteht darin, dass mein VBA mit "PowerPoint.application", "PowerPoint.presentation", .. nichts anfangen kann.
Wenn ich mir für den Ausdruck "Dim PPAPP as " die Möglichkeiten mit autovervollständigen anzeigen lasse, ist mit Powerpoint nichts dabei.
Hast Du eine Idee woran das liegen kann?
Viele Grüße
Dirk aus Hessen
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Automatische Präsentationen aus Excel erstellen mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere die Entwicklertools: Gehe zu "Datei" > "Optionen" > "Menüband anpassen" und aktiviere das Kontrollkästchen für die Entwicklertools.

  2. Füge ein neues Modul hinzu: Klicke auf "Visual Basic" in der Entwicklertools-Leiste und füge ein neues Modul hinzu.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub PowerPoint_Export()
       Dim app As Object
       Dim Slide As Object
       Set app = CreateObject("PowerPoint.Application")
       app.Visible = True
       app.Presentations.Add
       app.ActivePresentation.Slides.Add 1, ppLayoutBlank
       Sheets("Tabelle1").Range("A1:H30").CopyPicture
       Set Slide = app.ActivePresentation.Slides(1)
       Slide.Shapes.Paste
    End Sub
  4. Anpassen des Codes: Stelle sicher, dass der angegebene Bereich "A1:H30" korrekt ist und die aktiven Daten in deinem Arbeitsblatt widerspiegelt.

  5. Führe das Makro aus: Gehe zurück zu Excel, öffne die Makro-Liste und führe PowerPoint_Export aus.

  6. Behebe eventuelle Fehlermeldungen: Wenn du die Fehlermeldung "Invalid enumeration value" erhältst, überprüfe, ob die PowerPoint-Bibliothek in den Verweisen aktiviert ist.


Häufige Fehler und Lösungen

  • Fehler: "Invalid enumeration value": Dieser Fehler tritt häufig auf, wenn die PowerPoint-Bibliotheksreferenz nicht ordnungsgemäß gesetzt ist. Stelle sicher, dass du die richtigen Verweise in deinem VBA-Projekt aktiviert hast:

    • Gehe zu "Extras" > "Verweise" und aktiviere "Microsoft PowerPoint xx.0 Object Library".
  • Problem mit PPSlide: Wenn du versuchst, auf eine Folie zuzugreifen, die nicht existiert, überprüfe, ob du tatsächlich mindestens eine Folie in deiner Präsentation erstellt hast.

  • VBA erkennt PowerPoint nicht: Wenn beim Deklarieren von Dim PPApp As PowerPoint.Application der Fehler "Benutzerdefinierter Typ nicht definiert" auftritt, füge die oben genannten Verweise hinzu.


Alternative Methoden

Wenn du Probleme mit den VBA-Makros hast, kannst du auch PowerPoint manuell öffnen und die Folien selbst erstellen. Du kannst jedoch die Effizienz von VBA nutzen, um mehrere Folien basierend auf Excel-Daten automatisch zu generieren.

Eine andere Methode besteht darin, PowerPoint-Präsentationen über die Excel VBA-Umgebung zu steuern, indem du den CreateObject("PowerPoint.Application")-Befehl verwendest, um eine Instanz von PowerPoint zu erstellen.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um mehrere Folien aus einem Excel-Datenbereich zu erstellen:

Sub CreatePresentation()
    Dim pptApp As Object
    Dim pptPres As Object
    Dim slideIndex As Integer

    Set pptApp = CreateObject("PowerPoint.Application")
    Set pptPres = pptApp.Presentations.Add

    For slideIndex = 1 To 5
        pptPres.Slides.Add slideIndex, ppLayoutText
        pptPres.Slides(slideIndex).Shapes(1).TextFrame.TextRange.Text = "Titel " & slideIndex
        pptPres.Slides(slideIndex).Shapes(2).TextFrame.TextRange.Text = "Inhalt für Folie " & slideIndex
    Next slideIndex

    pptApp.Visible = True
End Sub

Dieses Beispiel erstellt eine Präsentation mit fünf Folien und füllt jede mit einem Titel und einem Textinhalt.


Tipps für Profis

  • Nutze With-Anweisungen, um den Code leserlicher zu machen und die Leistung zu verbessern.
  • Verwende On Error-Anweisungen, um Fehler abzufangen und zu behandeln.
  • Organisiere deine Makros in Module, um die Wartbarkeit zu erhöhen.
  • Vermeide das Hardcodieren von Werten; nutze stattdessen Variablen, um Flexibilität zu gewährleisten.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein VBA-Code immer funktioniert?
Achte darauf, dass alle erforderlichen Bibliotheken referenziert sind und überprüfe auf Syntaxfehler.

2. Welche Excel-Versionen unterstützen diesen VBA-Code?
Der Code sollte in Excel 2003, 2007 und späteren Versionen funktionieren.

3. Was tun, wenn PowerPoint nicht geöffnet wird?
Stelle sicher, dass PowerPoint auf deinem Computer installiert ist und dass du die richtigen Berechtigungen hast, um es zu steuern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige