2010-07-05 2 views
3

Учитывая слайд, как можно понять, все ли заполнители слайдов используются в PowerPoint?Как определить местозаполнитель в использовании?

Можно ли предотвратить автоматическое использование заполнителя при добавлении изображения, если этот заполнитель не используется?

ответ

1

Вам нужно будет пропустить все заполнители на слайде, определить тип каждого из них, а затем проверить, заполнен ли он ожидаемым форматом. Есть 18 PpPlaceholderType, поэтому вам нужно будет установить их все, но ниже приведен пример того, что вы можете сделать, чтобы проверить, используется ли местозаполнитель.

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 

Чтобы вставить, скажем, картину и не имеют его приезжайте в заполнитель, единственный способ я нашел, чтобы создать цикл, чтобы добавить фотографии, пока один из них из заменителя, а затем удалить те, которые уже вставлены.

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

Я знал об этом решении, я искал более элегантный. Что касается автоматического использования заполнителя, просто попробуйте добавить объект к слайду с макетом - ppLayoutObject сказать через activeSlide.Shapes.AddPicture (...); – Dudi

+0

Да, с PPT2007 все стало немного странно с заполнителями. Решение, о котором вы упоминали в своем другом сообщении, является одним из способов сделать это, но вы правы, у него есть обратные линии, когда старый slidelayout повторно применяется. Единственный способ, который я нашел, - это хакка. См. Обновление выше. –

+0

При использовании заполнителя это примерно так же изящно, как и получается :( –

1

Более элегантное решение, чтобы выяснить, если заполнитель содержит элемент или нет, и который является общим для всех типов:

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

Заполнитель составляет ContainedType msoAutoShape, если ничего не помещается внутри заполнитель. При вставке, например, изображения в заполнитель, тип изменяется на тип элемента, в данном случае msoPicture.

Офис автоматически добавляет элементы к первому доступному заполнителю (добавленному сначала в главный файл), или для изображений приоритет ppPlaceholderPicture.

+1

это ответ только на одну часть вопроса, в то время я больше беспокоился о том, как заставить офис не добавьте картинку в местозаполнитель – Dudi

+0

Иногда они все еще автошапе, хотя у них есть контент.: - / – BrainSlugs83

Смежные вопросы