2017-07-11 5 views
0

Fondamentalement, j'essaie d'utiliser une plage dans Excel pour produire automatiquement un ensemble de dispositions personnalisées dans PowerPoint. En suivant ce code, je suis capable de parcourir toutes les formes dans une plage prédéfinie, en copiant celles qui se trouvent dans la plage prédéfinie dans une mise en page personnalisée dans une présentation nouvellement créée.Existe-t-il un moyen de copier des formes à partir d'Excel et de les coller comme le même type de forme dans Powerpoint?

Mon problème est tout ce qu'il copie d'Excel à Powerpoint devient l'image au lieu de la forme.

est ici une partie de mon code:

Dim WS As Worksheet 
Dim PPT As Object 
Dim PRES As Object 
Dim PPTlay As Object 
Dim shp As Shape 
Dim r as Range 

Set WS = ActiveWorksheet 
Set r = WS.Range("A1:L36") 

'New PPT Presentation 
On Error Resume Next 

Set PPT = GetObject(class:="PowerPoint.Application") 

On Error GoTo 0 

If PPT Is Nothing Then Set PPT = CreateObject(class:="PowerPoint.Application") 

Set PRES = PPT.Presentations.Add 
PRES.PageSetup.SlideSize = ppSlideSizeOnScreen 

'Delete all layouts in slideMaster 
For i = PRES.SlideMaster.CustomLayouts.Count To 1 Step -1 
    PRES.SlideMaster.CustomLayouts(i).Delete 
Next i 

'Create new custom layout 
Set PPTlay = PRES.SlideMaster.CustomLayouts.Add(PRES.SlideMaster.CustomLayouts.Count + 1) 

'Delete all placeholders and shapes on newly created custom layout 
For i = PPTlay.Shapes.Count To 1 Step -1 
    PPTlay.Shapes(i).Delete 
Next i 

'Loop through all shape in Excel range "r" 
'Copy/paste to powerpoint custom Layout 
For Each shp In WS.Shapes 
    If Not Intersect(WS.Range(shp.TopLeftCell, shp.BottomRightCell), r) Is Nothing Then 
     shp.Select 
     Selection.Copy 
     PPTlay.Shapes.Paste 
     i = PPTlay.Shapes.Count 
     PPTlay.Shapes(i).LEFT = shp.LEFT 
     PPTlay.Shapes(i).TOP = shp.TOP 
    End If 
Next shp 

J'ai essayé aussi de sélectionner toutes les formes dans la gamme, copier la sélection, puis collez-le dans la présentation, mais le même problème est survenu.

Tout conseil serait le bienvenu.

Merci!

Répondre

0

Essayez

PPTlay.Shapes.PasteSpecial DataType:= ppPasteShape 

au lieu de

PPTlay.Shapes.Paste 
+0

Merci pour la réponse! Malheureusement, quand je l'ai essayé, j'ai une erreur ['-2147188160 (80048240) Shapes.PasteSpecial: Demande non valide. Le type de données spécifié n'est pas disponible.] Pour être sûr qu'il n'a pas été déclenché par une forme spécifique, j'ai utilisé On Error Resume Next. Mais pas de formes ont été copiées à la présentation. – Max