2010-07-05 7 views
3

Étant donné une diapositive, comment peut-on savoir si tous les espaces réservés de disposition de diapositives sont utilisés dans PowerPoint? Est-il possible d'empêcher l'utilisation automatique d'un espace réservé lors de l'ajout d'une image si ce paramètre n'est pas utilisé?Comment déterminer un espace réservé est utilisé?

Répondre

1

Vous devez parcourir tous les espaces réservés de la diapositive, déterminer le type de chacun et vérifier si le format est correct. Il existe 18 PpPlaceholderType, vous devez donc les configurer tous, mais voici un exemple de ce que vous pouvez faire pour vérifier si un espace réservé est utilisé.

Sub CheckPlaceholders() 
Dim ap As Presentation: Set ap = ActivePresentation 
Dim sl As Slide: Set sl = ap.Slides(2) 
Dim shs As Shapes: Set shs = sl.Shapes 
Dim ph As Placeholders: Set ph = shs.Placeholders 
Dim p As Shape 
    For Each p In ph 
     Select Case p.Type 
     Case PpPlaceholderType.ppPlaceholderHeader 
      If p.TextFrame.HasText Then 
       Debug.Print "This Placeholder is in use" 
      End If 
     Case PpPlaceholderType.ppPlaceholderChart 
      If p.HasChart Then 
       Debug.Print "This Placeholder is in use" 
      End If 
     End Select 
    Next 
End Sub 

Pour insérer, par exemple, une photo et pas il arrive dans un espace réservé, la seule façon que j'ai trouvé est de créer une boucle pour ajouter des images jusqu'à ce que l'un d'eux est d'un espace réservé, puis supprimer ceux déjà insérés.

Sub AddPicture() 
    Dim pic As String 
    pic = "C:\Users\Me\Desktop\beigeplum.jpg" 
    Dim ap As Presentation: Set ap = ActivePresentation 
    Dim sl As Slide: Set sl = ap.Slides(1) 
    Dim sh As Shape 

    Do 
     Set sh = sl.Shapes.AddPicture(pic, msoFalse, msoTrue, 1, 1) 
     sh.Tags.Add "MYPICTURE", 0 
    Loop Until sh.Type <> 14 

    Dim p As Shape 
    For Each p In sl.Shapes 
     If p.Type = 14 Then 
      If p.Tags.count > 0 Then 
       If p.Tags.Name(1) = "MYPICTURE" Then 
        p.Delete 
       End If 
      End If 
     End If 
    Next 
End Sub 
+0

Je connaissais cette solution, je cherchais une solution plus élégante. En ce qui concerne l'utilisation automatique de l'espace réservé, essayez simplement d'ajouter un objet à une diapositive avec disposition - ppLayoutObject say via activeSlide.Shapes.AddPicture (...); – Dudi

+0

Oui, depuis PPT2007 tout est devenu un peu bizarre avec les espaces réservés. La solution que vous avez mentionnée dans votre autre article est une façon de le faire, mais vous avez raison, elle a des inconvénients lorsque l'ancien slidelayout est réappliqué. La seule façon que j'ai trouvée est un peu hacky. Voir mise à jour ci-dessus. –

+0

Sur l'utilisation de l'espace réservé, c'est à peu près aussi élégant qu'il obtient :( –

1

Une solution plus élégante pour savoir si un espace réservé contient un élément ou non, et qui est générique pour tous les types:

if (selectedSlide.Shapes.Placeholders[i].PlaceholderFormat.ContainedType != Microsoft.Office.Core.MsoShapeType.msoAutoShape) 

Un espace réservé est de ContainedType msoAutoShape si rien n'est placé à l'intérieur l'espace réservé. Lorsque vous insérez par exemple une image dans l'espace réservé, le type change en type d'élément, dans ce cas msoPicture.

Office ajoute automatiquement des éléments au premier espace réservé disponible (ajouté en premier dans le fichier principal) ou, pour les images, à la priorité ppPlaceholderPicture.

+1

cela ne répond qu'à une partie de la question, à l'époque j'étais plus préoccupé par la façon de forcer le bureau à ne pas ajouter l'image dans un espace réservé – Dudi

+0

Parfois, ils sont encore autoshape même s'ils ont du contenu. – BrainSlugs83

Questions connexes