2017-03-09 1 views
1

Ich möchte einen benannten Excel-Bereich zu einem Inhalt Platzhalter in PowerPoint in einem benutzerdefinierten Layout einfügen. Ich verwende z.Zt. CodeVBA: Einfügen von Excel-Bereich zu PowerPoint-Platzhalter ohne Verwendung. Wählen

ranger.Copy 
currentPPT.ActiveWindow.View.GotoSlide ppt.slides.Count 
activeSlide.shapes("Picture").Select msoTrue 
ppt.Windows(1).View.PasteSpecial (ppPasteEnhancedMetafile) 

Es funktioniert normalerweise, aber manchmal schlägt unerklärlicherweise fehl. Ich habe woanders auf dieser Seite gesehen, here for example, sagen zu vermeiden, mit .Select-Methode. Verwenden Sie stattdessen so etwas wie

Dim oSh As Shape 
Set oSh = ActivePresentation.Slides(9).Shapes.PasteSpecial(ppPasteEnhancedMetafile)(1) 

aber ich kann nicht herausfinden, wie die zweite Methode zu verwenden, gerade auf einen Gehalt Platzhalter zu kopieren. Ist das möglich?

Bearbeiten, in Bezug auf Shais Vorschlag. Aktuelle Code ist

For ii = activeSlide.shapes.Count To 1 Step -1 
If activeSlide.shapes.Item(ii).Name = "Picture" Then 
    shapeInd = ii 
    Exit For 
End If 
Next ii 

Set oSh = activeSlide.shapes.PasteSpecial(2, msoFalse)(shapeInd) 

Die "Bild" Form ist ein "Content" Platzhalter. Die anderen beiden Formen sind Textfelder.

+0

einen Blick auf meine Antwort und unter Code, lassen Sie mich wissen, ob es funktioniert, wie Sie –

Antwort

0

Der unten stehende Code funktioniert wie Sie in Ihrem Beitrag erwähnt haben.

Zuerst erstellt es alle erforderlichen PowerPoint-Objekte, einschließlich der Einstellung der Präsentation und PPSlide.

Danach es durchläuft alle Shapes in PPSlide, und wenn es den Shape mit Name = "Picture" findet ruft sie den Index der Form in diesem Blech, so kann er das Einfügen Range Objekt direkt zu dieser Form (als Platzhalter).

-Code

Option Explicit 

Sub ExporttoPPT() 

Dim ranger   As Range 
Dim PPApp   As PowerPoint.Application 
Dim PPPres   As Presentation 
Dim PPSlide   As Slide 
Dim oSh    As Object 

Set PPApp = New PowerPoint.Application 
Set PPPres = PPApp.Presentations("PPT_TEST") ' <-- change to your open Presentation 
Set PPSlide = PPPres.Slides(9) 

Set ranger = Worksheets("Sheet1").Range("A1:C5")  
ranger.Copy 

Dim i As Long, ShapeInd As Long 

' loop through all shapes in Slide, check for Shape Name = "Picture" 
For i = PPSlide.Shapes.Count To 1 Step -1 
    If PPSlide.Shapes.Item(i).Name = "Picture" Then 
     ShapeInd = i '<-- retrieve the index of the searched shape 
     Exit For 
    End If 
Next i 

Set oSh = PPSlide.Shapes.PasteSpecial(2, msoFalse)(ShapeInd) ' ppPasteEnhancedMetafile = 2 

End Sub 
+0

soll ich erhalte eine Fehlermeldung auf der letzten Zeile. ShapeRange.Item: Ganzzahl außerhalb des Bereichs. 2 ist nicht im gültigen Bereich von 1 bis 1 Index. Ich bin mir nicht sicher, warum das passiert. Ich habe überprüft, dass activeSlide.shapes.Count ist 3 – drj3122

+0

@ drj3122 welche Linie? Wie viele Formen hast du in Folie 9? hat 'ShapeInd' einen Wert? Können Sie es im Debug-Modus versuchen? –

+0

'Set oSh = activeSlide.shapes.PasteSpecial (2, msoFalse) (shapeInd)' 3 Formen auf der Folie. 'shapeInd' ist der richtige Wert (2) – drj3122