2016-03-03 2 views
3

У меня есть макрос Powerpoint 2010, чтобы вставить конкретное изображение в фиксированное место на активном слайде.Изображение, добавленное через VBA (Powerpoint), получает вставку в placeholder

Dim oSlide As Slide 
Dim oPicture As Shape 

' Set oSlide to the active slide. 
Set oSlide = Application.ActiveWindow.View.Slide 

' Insert Image to Footer 
Set oPicture = oSlide.Shapes.AddPicture("PathToFile.png", _ 
    msoFalse, msoTrue, 630, 390, 15, 15) 

' Move the picture to the center of the slide. Select it. 
With ActivePresentation.PageSetup 
    oPicture.Select 
    oPicture.Name = "Dokumentverknüpfung" 
End With 

Этот код отлично работает, если на слайде нет неиспользуемого заполнителя. Если есть местозаполнитель, изображение автоматически добавляется в этот заполнитель.

Есть ли способ рассказать сценарию, чтобы избежать заполнителей и просто принять данные координаты?

Спасибо, Jens

ответ

1

Там нет никакого способа явно сказать PowerPoint не использовать заполнить пустые заполнителей с фотографиями, но вы можете остановить его от этого, убедившись, что там нет пустых заполнителей. Если вы вызываете sub ProtectEmptyPlaceholders до и после вставки вашего изображения, тогда изображение вставляется как новая фигура.

Sub InsertPicture() 
    Dim oSlide As Slide 
    Dim oPicture As Shape 

    ' Set oSlide to the active slide. 
    Set oSlide = Application.ActiveWindow.View.Slide 

    ' Protect empty placeholders from being auot-fileld by PowerPoint 
    ProtectEmptyPlaceholders oSlide, True 

    ' Insert Image to Footer 
    Set oPicture = oSlide.Shapes.AddPicture("PathToFile.png", _ 
    msoFalse, msoTrue, 630, 390, 15, 15) 

    ' Reset empty placeholders 
    ProtectEmptyPlaceholders oSlide, False 

    ' Move the picture to the center of the slide. Select it. 
    With ActivePresentation.PageSetup 
    oPicture.Select 
    oPicture.Name = "Dokumentverknüpfung" 
    End With 
End Sub 

' Purpose: Adds dummy text to empty placeholders so that pictures can 
'   be inserted without PowerPoint automatically placing them 
'   within the first empty placeholder that supports pictures. 
' Inputs: oSld - the slide to process. 
'   bProtect - if true, adds the dummy text to empty 
'   placeholders and if false, deletes the dummy text from. 
' Author: Jamie Garroch of YOUpresent.co.uk 04MAR2016 
Sub ProtectEmptyPlaceholders(oSld As Slide, bProtect As Boolean) 
    Const sText As String = "PROTECTED" 
    Dim oShp As Shape 
    For Each oShp In oSld.Shapes 
    If oShp.Type = msoPlaceholder Then 
     If oShp.PlaceholderFormat.ContainedType = msoAutoShape Then 
     If bProtect And Not oShp.TextFrame2.HasText Then oShp.TextFrame2.TextRange.text = sText 
     If Not bProtect And oShp.TextFrame2.TextRange.text = sText Then oShp.TextFrame2.DeleteText 
     End If 
    End If 
    Next 
End Sub 
+0

Вау, спасибо за быстрый ответ! Это сделало это, теперь макрос работает так, как должен :-) – Schmoozer

+0

Добро пожаловать, Дженс. Рад помочь и рад, что это сработало для вас. –