Collapse column

Autor Thema: Office 2016 Makro erzeugt PowerPoint aus Excel ohne Office Reference  (Gelesen 443 mal)

Offline Davidoff99

  • Newbie
  • *
  • Beiträge: 3
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2013
Office 2016 Makro erzeugt PowerPoint aus Excel ohne Office Reference
« am: März 15, 2018, 12:42:22 Nachmittag »
Hallo Forums mitglieder,
aus einem Excel soll automatisiert eine PowerPoint mit vorgegebenen Template generiert werden.
Da die Anwender unterschiedliche Excel Versionen nutzen, kann die Reference nicht verwendet werden (late Binding).
Mein Makro erstellt aus einer im Excel hinterlegten PowerPoint Vorlage eine neue PowerPoint und soll die Daten aus Excel in bestimmte Shapes übertragen.


Mein Code:
'** Alles auf Public da dies Variablen über mehre Module aufrufbar sein sollen
Sub CreatePPT
   Public Pfad As String
   Public strFilename As String
   Public rngRange As Range
   Public ppApp As Object
   Public ppPres As Object

'** Erstelle PowerPoint

   If Err.Number <> 0 Then
    Set ppApp = CreateObject("PowerPoint.Application")
        PowerPoint.Application.WindowState = ppWindowStateMinimize
        PowerPoint.Application.WindowState = ppWindowStateMinimize
   End If
   
   Worksheets("VERSION").Visible = xlSheetVisible
   Worksheets("VERSION").Select
   Worksheets("VERSION").OLEObjects("PPTTemplate").Verb Verb:=xlVerbAdd
   Set ppPres = ActiveSheet.OLEObjects("PPTTemplate")
 
   Set ppPres = GetObject(, "PowerPoint.Application")
   Set rngRange1 = Worksheets("CUSTOMER INFO").Range("Company")
   Set rngRange2 = Worksheets("CUSTOMER INFO").Range("SFDC_SR")
   Pfad = Worksheets("CUSTOMER INFO").Range("File_Location")
   strFilename = rngRange1.value & "_" & rngRange2.value
   
'** hier soll auf Slide 1 der PPT die Shapes mit den Informationen aus Excel gefüllt werden.
  ppPres.Slides(1).Select
  ppPres.Slides(1).Shapes("Title 1").TextFrame.TextRange.Characters.Text = Worksheets("CUSTOMER INFO").Range("Title").value
  ppPres.Slides(1).Shapes("Subtitle 2").TextFrame.TextRange.Characters.Text = Worksheets("CUSTOMER INFO").Range("Company").value
  ppPres.Slides(1).Shapes("Costumer_Adress").TextFrame.TextRange.Characters.Text = Worksheets("CUSTOMER INFO").Range("Costumer_Adress").value

End Sub

Allerdings bekomme ich folgende Fehlermeldung:
Run-Time error `438`: Object doesn´t support this property or method
und das Makro bleibt in der Zeile ppPres.Slides(1).Select stehen.

Wenn ich die Reference nutze, funktioniert das Script einwandfrei...

Hat einer eine Idee wo mein Fehler liegt?
Danke im Voraus.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 975
  • Microsoft MVP
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw:Office 2016 Makro erzeugt PowerPoint aus Excel ohne Office Reference
« Antwort #1 am: März 16, 2018, 10:04:30 Vormittag »
Hallo,

ungetestet, aber Du könntest mal versuchen, die Zeile einfach wegzulassen. Select braucht man normalerweise nicht. Ansonsten verbliebe
den Code in PPT selbst zu testen und auch in der entsprechenden Version (falls Du 2 PPT bei Dir hast).

Gruß
Microsoft Most Valuable Professional (MVP) 2011 - 2018/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline Jens

  • Newbie
  • *
  • Beiträge: 2
    • Profil anzeigen
  • Office-KnowHow: Profi
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw:Office 2016 Makro erzeugt PowerPoint aus Excel ohne Office Reference
« Antwort #2 am: April 01, 2018, 23:12:29 Nachmittag »
Moin,

der Aufruf funktioniert nicht, da ppPres kein Presentation-Object ist, siehe Set ppPres = GetObject(, "PowerPoint.Application"), sondern eben ein Application-Object (für Powerpoint).

Daher wäre z.B. ppPres.Presentations(1).slides(1).shapes... richtig, um die Shapes zu adressieren.

Besser wäre es jedoch, direkt Dein ppApp-Objekt zu nutzen und ppPres richtig zuzuweisen mit Set ppPres = ppApp.Activepresentation beispielsweise.

Wenn du die Nase von VBA voll haben solltest, empfehle ich Dir ansonsten einen Automatisierungsweg ohne VBA-Coding via https://slidefab.com

HG
Jens