2017-09-18 1 views
0

J'ai une macro qui ouvre un fichier PowerPoint stockées sur le classeur et modifie ensuite à l'aide du code ci-dessousConversion fichier PPT en PDF

Set PApp = CreateObject("PowerPoint.Application") 
PApp.Visible = True 
Pth = ThisWorkbook.Path 
ErrorPopUp = True 

Dim TsyTemplate As Object 

Set TsyTemplate = ThisWorkbook.Sheets("Report Templates").OLEObjects(“Report 1”) 
TsyTemplate.Copy 
Sheets("Version Control").Paste 
Set TsyTemplate = ThisWorkbook.Sheets("Book 1").OLEObjects(1) 
TsyTemplate.Verb Verb:=xlOpen 

Set TsyTemplate = Nothing 

Set PPres = PApp.ActivePresentation 

Cela fonctionne bien mais je veux ajouter un peu de code qui convertit ensuite la ouvrir le fichier PowerPoint dans un fichier PDF. Je préférerais convertir juste sans l'enregistrer quelque part, mais je ne crois pas que ce soit possible, donc je suis en utilisant le code ci-dessous pour qu'il l'enregistrer comme un fichier PDF

PDFName = ActiveWorkbook.Path & "/test.pdf" 
PPres.ExportAsFixedFormat Path:=PDFName,  FixedFormatType:=ppFixedFormatTypePDF,  RangeType:=ppPrintSelection 

Ce ne fonctionne pas bien que je obtenir le message d'erreur "incompatibilité de type"

Est-ce que quelqu'un a des suggestions sur ce que je fais mal.

Merci

code complet:

Global PApp As Object 
Global PPres As Object 
Global PPTFileName As String 
Global ppFixedFormatTypePDF As Long 
Global ppPrintSelection As Long 

Sous Test_Printing_To_PDF()

Set PApp = CreateObject("PowerPoint.Application") 
PApp.Visible = True 
Pth = ThisWorkbook.Path 
ErrorPopUp = True 

Dim TsyTemplate As Object 

Set TsyTemplate = ThisWorkbook.Sheets("Report Templates").OLEObjects("Report 1") 
TsyTemplate.Copy 
Sheets("Version Control").Paste 

Set TsyTemplate = ThisWorkbook.Sheets("Version Control").OLEObjects(1) 

TsyTemplate.Verb Verb:=xlOpen 

Set TsyTemplate = Nothing 

Set PPres = PApp.ActivePresentation 


PPres.Slides(1).Shapes("Presentation_Title").TextFrame.TextRange.Text = "Test printing code" 


ppFixedFormatTypePDF = 2 
ppPrintSelection = 2 


PDFName = ActiveWorkbook.Path & "/test.pdf" 
PPres.ExportAsFixedFormat Path:=PDFName, FixedFormatType:=ppFixedFormatTypePDF, RangeType:=ppPrintSelection 

End Sub

+0

Où vous DIM vos variables et qu'avez-vous DIMmed PPres comme? Alsol ppFixedFormatTypePDF et ppPrintSelection sont des constantes PPT, non définies dans Excel, donc vous devrez les définir (à la fois comme Longs = 2) –

+0

Salut Steve. Les variables sont définies ailleurs dans le module. Ppres est défini comme objet. Je n'avais pas défini les 2 autres donc l'ai fait (en tant que longs et = 2) mais je reçois toujours le message de type incompatibilité –

+0

Sur quelle ligne l'erreur se produit-elle? FWIW, La partie exportation PDF de votre code fonctionne comme prévu dans PowerPoint avec seulement quelques mods pour s'adapter au fait que je l'ai exécuté dans PPT. Mais vous définissez PPres à la présentation active, mais y a-t-il une présentation active? Vous n'avez pas encore ouvert ou ajouté de diapositives à la présentation par défaut, alors qu'essayez-vous exactement d'exporter au format PDF? –

Répondre

0

j'ai enlevé une partie de votre code Excel afin que je puisse essayer ici ; car il semble ne rien avoir à voir avec l'exportation PDF de PPT, ne devrait pas faire de différence. Nouveau code (fonctionnant) ci-dessous avec des commentaires:

Option Explicit 

Global PApp As Object 
Global PPres As Object 
Global PPTFileName As String 
Global ppFixedFormatTypePDF As Long 
Global ppPrintSelection As Long 

Const ppSaveAsPDF As Long = 32 

Sub Test_Printing_To_PDF() 

' Always include Option Explicit and DIM all variables 
Dim Pth As String 
Dim ErrorPopUp As Boolean 
Dim PDFName As String 

Set PApp = CreateObject("PowerPoint.Application") 
PApp.Visible = True 
Pth = ThisWorkbook.Path 
ErrorPopUp = True 

' Just invoking PowerPoint doesn't necessarily create a presentation. 
' You need to add one (or open an existing one) 
Set PPres = PApp.presentations.Add 

' And creating a new presentation doesn't necessarily add slides so: 
PPres.slides.Add 1, 1 

' Unless you've opened a presentation that happens to have a shape named 
' Presentation_Title on the first slide, this will fail: 
'PPres.slides(1).Shapes("Presentation_Title").TextFrame.TextRange.Text = "Test printing code" 
' So I've changed it to this: 
PPres.slides(1).Shapes(1).TextFrame.TextRange.Text = "Test printing code" 

'/isn't a valid character: 
'PDFName = ActiveWorkbook.Path & "/test.pdf" 
' so I changed it to this: 
PDFName = ActiveWorkbook.Path & "\test.pdf" 

' And there are all sorts of reports all over the net about 
' the Export routine being buggy. Substitute this and it works: 
PPres.SaveAs PDFName, ppSaveAsPDF 


End Sub 
+0

Cela a fonctionné, merci –