2017-05-17 2 views
0

für mein schlechtes Englisch im Voraus Apologize, verwendet i Teil google ... übersetzenFür jedes Textfeld in allen Folien von Powerpoint (VBA)

ich in den ppt-Folien verstreut stecken alle Textfelder im Radsport. Was ich tun soll, ist, zuerst eine PPT-Datei von Word zu öffnen oder nach Codes zu suchen, die in den als Tags verwendeten Textfeldern eingegeben werden. Sobald ich den entsprechenden Code finde (ich weiß nicht, ob ich ihn richtig geschrieben habe), sollte ich eine Kopie der gesamten Folie machen (ich weiß nicht, wie ich sie dem Textfeld zuweisen soll) und sie auf eine Seite einfügen (für jetzt zufällig) In Word. Ich suchte auf Google und fand einen scheinbar guten Code, aber ich war „ERROR 13“ in der zweiten „For Each“

public sub elaboraSlidePpt() 


    Dim pptPres As PowerPoint.Presentation 
    Dim pptApp As PowerPoint.Application 
    Dim pptSlide As PowerPoint.Slide 
    Dim pptPath As String 
    Set doc = Application.ActiveDocument 
    Dim docPpt As Slide 

    pptPath = file_dir + "\" + file_name 

    Set pptApp = CreateObject("PowerPoint.Application") 
    pptApp.Visible = False 
    Set pptPres = pptApp.Presentations.Open(pptPath) 

    Dim sld As Slide, shp As Shape 
    For Each sld In pptApp.ActivePresentation.Slides 
     For Each shp In sld.Shapes '<-- ERROR 13 
     If shp.Type = "img10" Then 

      pptApp.ActivePresentation.Slides(????).Copy 
      Application.ActiveDocument.Activate 
      Selection.PasteAndFormat (wdPasteEnhancedMetafile) 

     End If 
     Next shp 
    Next sld 
end sub 

Antwort

1

ich eine Reihe von Dingen korrigiert habe. Probieren Sie es aus:

public sub elaboraSlidePpt() 

    Dim pptPres As PowerPoint.Presentation 
    Dim pptApp As PowerPoint.Application 
    Dim pptSlide As PowerPoint.Slide 
    ' Create a POWERPOINT slide variable to use later 
    Dim pptShape as PowerPoint.Shape 
    Dim pptPath As String 
    Set doc = Application.ActiveDocument 
    Dim docPpt As Slide 

    ' use & to combine strings, not + 
    pptPath = file_dir & "\" & file_name 

    Set pptApp = CreateObject("PowerPoint.Application") 
    pptApp.Visible = False 
    Set pptPres = pptApp.Presentations.Open(pptPath) 

    'Dim sld As Slide, shp As Shape 
    For Each pptSlide In pptPres.Slides 
     For Each pptShape In pptSlide.Shapes 
     ' You'll need to fix this ... 
     ' .Type will return a Long, not a string 
     If pptShape.Type = "img10" Then 

      pptSlide.Copy 
      Application.ActiveDocument.Activate 
      Selection.PasteAndFormat (wdPasteEnhancedMetafile) 

     End If 
     Next ' Shape 
    Next ' Slide 
end sub 
+0

Vielen Dank für die Antwort. Der Code funktioniert, das einzige Problem bleibt, wie man den Inhalt der Textfelder, die in jeder Folie vorhanden sind, ändert. (Ich benutze sie als Tags, weil wenn Textfelder mit einem String übereinstimmen, kopieren Sie die Folie auf das Band woanders) In Word gibt es Lesezeichen oder "normale Textkontrolle", aber in Ppt habe ich mit Textfeldern angeordnet. Wie löse ich dieses Problem? Vielen Dank und guten Tag –

+0

Sie könnten stattdessen .Tags auf den PPT-Folien dafür verwenden. Ich habe einen Artikel über sie auf meiner PPT FAQ-Seite: Arbeiten mit Tags (und ein wenig über Funktionen) http://www.pptfaq.com/FAQ00815_Working_with_Tags_and_a_bit_about_Functions-.htm –

Verwandte Themen