Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1216to1220
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
Anzeige
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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige